Http 服务器如何知道请求是通过凭据发送的?

Http 服务器如何知道请求是通过凭据发送的?,http,cors,xmlhttprequest,http-headers,Http,Cors,Xmlhttprequest,Http Headers,我在通过我的网站从另一台服务器请求资源时遇到了一个问题 我请求资源(通过范围请求请求的PDF文件)。 浏览器(本例中为Chrome)向服务器发送选项请求。 服务器从选项返回200,但其中一个标题是-Access Control Allow Credentials:true 由于服务器为访问控制允许来源响应头公开了通配符*,因此Chrome(我认为)抛出了来自服务器的以下响应,并给我一个错误,即如果请求是with credentials='include',服务器无法公开通配符 现在,我没有在代码

我在通过我的网站从另一台服务器请求资源时遇到了一个问题

我请求资源(通过范围请求请求的PDF文件)。 浏览器(本例中为Chrome)向服务器发送选项请求。 服务器从选项返回200,但其中一个标题是-
Access Control Allow Credentials:true
由于服务器为
访问控制允许来源
响应头公开了通配符
*
,因此Chrome(我认为)抛出了来自服务器的以下响应,并给我一个错误,即如果请求是
with credentials='include'
,服务器无法公开通配符

现在,我没有在代码中可以看到的任何地方设置
with credentials
标志,而且我似乎无法了解服务器如何知道是否发送了带有凭据的请求。我的Cookie没有随选项一起发送,也没有随GET/PARTIAL内容请求一起发送。我在请求中看不到其他特殊的头

所以

  • 服务器如何知道以及我如何在客户端判断wither凭据是否设置为包含

  • 如果我没有设置凭据,是什么导致Chrome认为我使用的模式是
    withCredentials='include'

  • 在选项之后,服务器是否应该在所有请求上发回
    访问控制允许凭据:true
  • 服务器如何知道以及我如何在客户端判断wither凭据是否设置为包含
  • 接收服务器不知道任何有关客户端
    with credentials
    设置的信息。服务器只是在请求中接收某种形式的凭据,或者不接收。就CORS协议而言,接收服务器不会根据请求是否包含凭据来更改其行为。接收服务器要么只是发送回
    访问控制允许凭据:true
    响应头,要么不发送

  • 如果我没有设置凭据,是什么导致Chrome认为我使用的模式是
    withCredentials='include'
  • 答案是,这是主观的——这取决于服务器管理员打算为谁响应。但最佳实践是,您可能只想将
    访问控制允许凭据:true
    发送回您知道并明确希望允许的特定来源。这就是为什么CORS协议有一个限制,即如果请求具有凭据并且响应具有
    访问控制允许源:
    (通配符)头值,则它不允许前端代码访问响应

  • 在选项之后,服务器是否应该在所有请求上发回
    访问控制允许凭据:true

  • Chrome只会认为,如果模式实际上是
    with credentials='include'
    。因此,要么你的客户端代码的某个部分实际设置了
    withCredentials='include'
    ,要么,
    withCredentials='include'
    实际上并没有设置全部,但你出于某种原因只是认为它是。

    @sideshowbarker在回答你的最后一点时,我都不能,也没关系。我将withCredentials显式设置为false,但请求在实际发送之前确实会通过一些供应商代码进行路由。该代码是缩小的JS和/或WASM C代码。我会接受这些评论作为一个有效的答案,因为它强化了我所期望听到的。我猜是供应商代码不知怎么设置的,我就是找不到,会联系他们的。如果我不能以编程方式检查“withCredentials”,那么我不确定还能做什么。