Javascript 如何检测由新的获取标准发起的请求?一般来说,我应该如何检测AJAX请求?

Javascript 如何检测由新的获取标准发起的请求?一般来说,我应该如何检测AJAX请求?,javascript,ajax,google-chrome,xmlhttprequest,fetch-api,Javascript,Ajax,Google Chrome,Xmlhttprequest,Fetch Api,在服务器上,知道传入的请求是AJAX可能很有用 大多数js库使用XMLHttpRequest,因此提供HTTP\u X\u REQUESTED\u和:XMLHttpRequest,但Chrome的实现和新的实现都没有使用类似的头。那么,如何检测请求是AJAX呢 为什么没有通过fetch和XMLHttpRequest的标准强制执行标识其启动器的请求?是否应该将其他内容用于决策(例如,客户提供他们期望的响应内容类型)?查看存储库,特别是评论 由于X-Requested-With头不是标准的,因此它们

在服务器上,知道传入的请求是AJAX可能很有用

大多数js库使用
XMLHttpRequest
,因此提供
HTTP\u X\u REQUESTED\u和:XMLHttpRequest
,但Chrome的实现和新的实现都没有使用类似的头。那么,如何检测请求是AJAX呢

为什么没有通过
fetch
XMLHttpRequest
的标准强制执行标识其启动器的请求?是否应该将其他内容用于决策(例如,客户提供他们期望的响应内容类型)?

查看存储库,特别是评论

由于
X-Requested-With
头不是标准的,因此它们使用的包装器提供了一些缺少的行为

如果需要更多指导,请检查包装器代码:

function headers(options) {
  options = options || {}
  options.headers = options.headers || {}
  options.headers['X-Requested-With'] = 'XMLHttpRequest'
  return options
}
为什么标识其启动器的请求没有通过标准强制执行

因为这不重要

HTTP客户端请求他们想要的东西。服务器应该把它交给他们

根据客户的情况给客户提供不同的服务往往会导致更多的问题,而不是解决问题。用户代理嗅探就是一个主要的例子

是否应该在决策过程中使用其他内容(例如,客户提供他们期望的响应内容类型)


Accept
头是专门提供的,当HTTP资源有多种格式可用时,它允许客户机指定他们喜欢的数据格式。

对于任意客户机,您无法可靠地检测到这一点。如果控制客户端,则可以添加一些参数、路径元素或头。但理想情况下,您不需要这样做。如果请求需要以不同的方式处理,客户机应该明确指出哪个选项是合适的(例如,通过为AJAX和页面加载提供单独的URL路径)。单页面应用程序可以通过AJAX请求HTML,因此Accept标头与非AJAX请求没有区别。。。。然而,重定向是这个问题的关键所在,特别是在处理401到外部身份提供者时。i、 e.服务器应用程序代码引发401=>身份验证处理程序转换为301=>浏览器跟随并导航窗口。如果请求是AJAX请求,那么浏览器将不会导航,但fetch/XMLHttpRequest将跟随。服务器需要发回401