在服务器上,知道传入请求是 AJAX 会很有用。
大多数 js 库都使用XMLHttpRequest
并提供HTTP_X_REQUESTED_WITH: XMLHttpRequest
,但是 Chrome 的实现和Github 的新polyfill 都没有fetch
使用类似的标头。那么如何检测到请求是 AJAX 呢?
为什么识别其发起者的请求没有通过fetch
和的标准强制执行XMLHttpRequest
?是否应该使用其他东西进行决策(例如,客户提供他们期望的响应内容类型)?
在Github 的 polyfill存储库中查看此问题,特别是此评论。
由于X-Requested-With
标头不是标准,因此他们使用的包装器提供了一些缺失的行为。
如果您需要更多指导,请检查以下包装代码行:
function headers(options) {
options = options || {}
options.headers = options.headers || {}
options.headers['X-Requested-With'] = 'XMLHttpRequest'
return options
}
为什么识别其发起人的请求未通过标准强制执行
因为应该没关系。
HTTP 客户端请求他们想要得到的东西。服务器应该把它给他们。
根据客户的情况为客户提供不同的东西往往会导致比解决的问题更多的问题。用户代理嗅探是一个典型的例子。
是否应该使用其他东西进行决策(例如,客户提供他们期望的响应内容类型)?
是的。
标Accept
头是专门为允许客户端指定当 HTTP 资源以多种格式可用时他们更喜欢数据的格式而提供的。