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

时间:2015-11-12 00:18:42

标签: javascript ajax google-chrome xmlhttprequest fetch-api

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

大多数js库使用XMLHttpRequest,因此提供HTTP_X_REQUESTED_WITH: XMLHttpRequest,但Chrome的实现和新Github's polyfillfetch都不使用类似的标头。那么怎样才能检测到请求是AJAX?

为什么标识其发起人的请求未通过fetchXMLHttpRequest的标准强制执行?是否应该使用其他东西进行决策(例如,客户提供他们期望的内容类型作为回应)?

2 个答案:

答案 0 :(得分:6)

查看this issue存储库中的Github's polyfill,特别是this评论。

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

如果您需要更多指导,请查看包装器代码的this lines

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

答案 1 :(得分:5)

  

为什么标识其发起人的请求未通过标准强制执行

因为它无所谓。

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

根据客户的需求为客户提供不同的服务往往会导致比解决更多的问题。用户代理嗅探是一个很好的例子。

  

是否应该使用其他东西进行决策(例如,客户提供他们期望回复的内容类型)?

Accept标头专门用于允许客户端在多种格式的HTTP资源可用时指定他们更喜欢哪种格式的数据。