[英]Cross-domain cookies in preflight requests
两个组件:
登录时,Apigee 使用Set-Cookie
header 设置jwt
cookie:
Set-Cookie: jwt={jwtoken};secure;httponly;path=/;samesite=none
在客户端 Chrome 向我显示了框架https://react.mycompany.com
的 cookie:
name: jwt
value: XXX
domain: apigee.proxy.com
path: /
httpOnly: true
secure: true
sameSite: none
现在,对于非身份验证请求,Apigee 在处理请求之前会检查jwt
cookie 的存在。
cookie 不会在OPTIONS
预检请求中发送,因此所有调用都会失败。
在客户端,我们使用fetch()
API 和credentials: 'include'
。
我在这里想念什么?
浏览器永远不会在预检OPTIONS
请求中发送 cookies 。 所以问题描述的是预期的行为。 浏览器不在预检中发送 cookies 的原因是因为 CORS 协议的规范要求浏览器从预检中排除 cookies 和所有其他标准标头凭据(例如,授权标头)。 请参阅https://fetch.spec.whatwg.org/#ref-for-credentials%E2%91%A5 ,其中指出:
CORS 预检请求从不包含凭据
…另见答案https://stackoverflow.com/a/50959576/441757 。
因此,预检发送到的服务器必须配置为允许未经身份验证的OPTIONS
请求 - 并且必须以 200 OK 响应OPTIONS
请求,即使请求不包含任何 cookies 或其他凭据。 这是 CORS 协议的基本要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.