在服务器上,知道传入的请求是 AJAX 是很有用的。
大多数js库使用XMLHttpRequest
,因此提供HTTP_X_REQUESTED_WITH: XMLHttpRequest
,但无论是Chrome的实现还是新fetch
的Github's polyfill都没有使用类似的头文件。那么如何检测请求是 AJAX 呢?
为什么标识其发起方的请求没有通过fetch
和XMLHttpRequest
标准强制执行?是否应使用其他方法进行决策(例如客户端提供他们期望响应的内容类型)?
在服务器上,知道传入的请求是 AJAX 是很有用的。
大多数js库使用XMLHttpRequest
,因此提供HTTP_X_REQUESTED_WITH: XMLHttpRequest
,但无论是Chrome的实现还是新fetch
的Github's polyfill都没有使用类似的头文件。那么如何检测请求是 AJAX 呢?
为什么标识其发起方的请求没有通过fetch
和XMLHttpRequest
标准强制执行?是否应使用其他方法进行决策(例如客户端提供他们期望响应的内容类型)?
3条答案
按热度按时间ktca8awb1#
在Github's polyfill仓库上查看this issue,特别是这条评论。
由于
X-Requested-With
头不是标准,所以他们使用了一个 Package 器来提供一些缺失的行为。如果您需要更多指导,请检查 Package 器代码的这几行:
jv4diomz2#
为什么标识其发起者的请求没有通过标准强制执行
因为这不重要。
HTTP客户端请求他们想要得到的东西。服务器应该给予他们。
根据客户是什么给客户一些不同的东西往往会导致更多的问题比它解决。User-Agent嗅探就是一个很好的例子。
是否应使用其他方法进行决策(例如客户端提供他们期望响应的内容类型)?
是的。
Accept
标头专门用于允许客户端指定当HTTP资源以多种格式可用时,他们更喜欢哪种格式的数据。jtw3ybtb3#
下面是一个设置HTTP_X_REQUESTED_WITH头的具体示例: