如何检测由新的抓取标准发起的请求?一般来说,我应该如何检测 AJAX 请求?
How do I detect requests initiated by the new fetch standard? How should I detect an AJAX request in general?
在服务器上,了解传入请求是 AJAX。
可能很有用
大多数 js 库使用 XMLHttpRequest
,因此提供 HTTP_X_REQUESTED_WITH: XMLHttpRequest
,但 Chrome 和 Github's polyfill of the new fetch
的实现都没有使用类似的 header。那么如何检测请求是 AJAX?
为什么不通过 fetch
和 XMLHttpRequest
的标准强制执行标识其发起者的请求? decision-making 是否应该使用其他内容(例如,客户提供他们期望的 content-type 作为响应)?
查看 this issue on the Github's polyfill repository, specially this 评论。
由于 X-Requested-With
header 不是标准,他们使用的包装器提供了一些缺失的行为。
如果您需要更多指导,请查看包装代码的 this lines:
function headers(options) {
options = options || {}
options.headers = options.headers || {}
options.headers['X-Requested-With'] = 'XMLHttpRequest'
return options
}
Why is a request identifying its initiator not enforced through standards
因为这不重要。
HTTP 客户端请求他们想要得到的东西。服务器应该给他们。
根据客户的情况为客户提供不同的东西往往会导致比解决的问题更多的问题。 User-Agent 嗅探就是一个典型的例子。
Should something else be used for decision-making (e.g. clients providing the content-type they expect in response)?
是的。
Accept
header 专门用于允许客户端指定当 HTTP 资源以多种格式可用时他们更喜欢数据的格式。
在服务器上,了解传入请求是 AJAX。
可能很有用大多数 js 库使用 XMLHttpRequest
,因此提供 HTTP_X_REQUESTED_WITH: XMLHttpRequest
,但 Chrome 和 Github's polyfill of the new fetch
的实现都没有使用类似的 header。那么如何检测请求是 AJAX?
为什么不通过 fetch
和 XMLHttpRequest
的标准强制执行标识其发起者的请求? decision-making 是否应该使用其他内容(例如,客户提供他们期望的 content-type 作为响应)?
查看 this issue on the Github's polyfill repository, specially this 评论。
由于 X-Requested-With
header 不是标准,他们使用的包装器提供了一些缺失的行为。
如果您需要更多指导,请查看包装代码的 this lines:
function headers(options) {
options = options || {}
options.headers = options.headers || {}
options.headers['X-Requested-With'] = 'XMLHttpRequest'
return options
}
Why is a request identifying its initiator not enforced through standards
因为这不重要。
HTTP 客户端请求他们想要得到的东西。服务器应该给他们。
根据客户的情况为客户提供不同的东西往往会导致比解决的问题更多的问题。 User-Agent 嗅探就是一个典型的例子。
Should something else be used for decision-making (e.g. clients providing the content-type they expect in response)?
是的。
Accept
header 专门用于允许客户端指定当 HTTP 资源以多种格式可用时他们更喜欢数据的格式。