Http 服务器如何知道请求是通过凭据发送的?
我在通过我的网站从另一台服务器请求资源时遇到了一个问题 我请求资源(通过范围请求请求的PDF文件)。 浏览器(本例中为Chrome)向服务器发送选项请求。 服务器从选项返回200,但其中一个标题是-Http 服务器如何知道请求是通过凭据发送的?,http,cors,xmlhttprequest,http-headers,Http,Cors,Xmlhttprequest,Http Headers,我在通过我的网站从另一台服务器请求资源时遇到了一个问题 我请求资源(通过范围请求请求的PDF文件)。 浏览器(本例中为Chrome)向服务器发送选项请求。 服务器从选项返回200,但其中一个标题是-Access Control Allow Credentials:true 由于服务器为访问控制允许来源响应头公开了通配符*,因此Chrome(我认为)抛出了来自服务器的以下响应,并给我一个错误,即如果请求是with credentials='include',服务器无法公开通配符 现在,我没有在代码
Access Control Allow Credentials:true
由于服务器为访问控制允许来源
响应头公开了通配符*
,因此Chrome(我认为)抛出了来自服务器的以下响应,并给我一个错误,即如果请求是with credentials='include'
,服务器无法公开通配符
现在,我没有在代码中可以看到的任何地方设置with credentials
标志,而且我似乎无法了解服务器如何知道是否发送了带有凭据的请求。我的Cookie没有随选项一起发送,也没有随GET/PARTIAL内容请求一起发送。我在请求中看不到其他特殊的头
所以
withCredentials='include'
访问控制允许凭据:true
头with credentials
设置的信息。服务器只是在请求中接收某种形式的凭据,或者不接收。就CORS协议而言,接收服务器不会根据请求是否包含凭据来更改其行为。接收服务器要么只是发送回访问控制允许凭据:true
响应头,要么不发送
withCredentials='include'
访问控制允许凭据:true
发送回您知道并明确希望允许的特定来源。这就是为什么CORS协议有一个限制,即如果请求具有凭据并且响应具有访问控制允许源:
(通配符)头值,则它不允许前端代码访问响应
访问控制允许凭据:true
头Chrome只会认为,如果模式实际上是
with credentials='include'
。因此,要么你的客户端代码的某个部分实际设置了withCredentials='include'
,要么,withCredentials='include'
实际上并没有设置全部,但你出于某种原因只是认为它是。@sideshowbarker在回答你的最后一点时,我都不能,也没关系。我将withCredentials显式设置为false,但请求在实际发送之前确实会通过一些供应商代码进行路由。该代码是缩小的JS和/或WASM C代码。我会接受这些评论作为一个有效的答案,因为它强化了我所期望听到的。我猜是供应商代码不知怎么设置的,我就是找不到,会联系他们的。如果我不能以编程方式检查“withCredentials”,那么我不确定还能做什么。