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

u1ehiz5o  于 2023-05-11  发布在  Go
关注(0)|答案(3)|浏览(154)

在服务器上,知道传入的请求是 AJAX 是很有用的。
大多数js库使用XMLHttpRequest,因此提供HTTP_X_REQUESTED_WITH: XMLHttpRequest,但无论是Chrome的实现还是新fetchGithub's polyfill都没有使用类似的头文件。那么如何检测请求是 AJAX 呢?
为什么标识其发起方的请求没有通过fetchXMLHttpRequest标准强制执行?是否应使用其他方法进行决策(例如客户端提供他们期望响应的内容类型)?

ktca8awb

ktca8awb1#

Github's polyfill仓库上查看this issue,特别是这条评论。
由于X-Requested-With头不是标准,所以他们使用了一个 Package 器来提供一些缺失的行为。
如果您需要更多指导,请检查 Package 器代码的这几行:

function headers(options) {
  options = options || {}
  options.headers = options.headers || {}
  options.headers['X-Requested-With'] = 'XMLHttpRequest'
  return options
}
jv4diomz

jv4diomz2#

为什么标识其发起者的请求没有通过标准强制执行
因为这不重要。
HTTP客户端请求他们想要得到的东西。服务器应该给予他们。
根据客户是什么给客户一些不同的东西往往会导致更多的问题比它解决。User-Agent嗅探就是一个很好的例子。
是否应使用其他方法进行决策(例如客户端提供他们期望响应的内容类型)?
是的。
Accept标头专门用于允许客户端指定当HTTP资源以多种格式可用时,他们更喜欢哪种格式的数据。

jtw3ybtb

jtw3ybtb3#

下面是一个设置HTTP_X_REQUESTED_WITH头的具体示例:

fetch("/url", {
  method: "POST",
  headers: {
    "X-Requested-With": "XMLHttpRequest",
  },
});

相关问题