如果选项中存在{credentials:"include"},是否使用Fetch API发送具有HttpOnly和Secure属性的cookie?
fetch("https://some.url", {
mode: "same-origin",
credentials: "include",
redirect: "manual"
})
有几个条件必须满足,但是的。
- 客户端使用
credentials: 'include'
异步初始化获取请求。有关详细信息,请参见[此处][1]- 若要执行CORS,服务器响应标头必须包含显式设置为域的
Access-Control-Allow-Origin
,这可能与服务器域不同。例如,在单页应用程序体系结构中,您的前端站点临时托管在localhost:3000,后端服务器托管在localhost:8000,那么标头应该是Access-Control-Allow-Origin: http://localhost:3000
。请参见[此处][2]和[此处][3]- 为了允许客户端处理cookie(这显然是一种敏感资源(,服务器响应标头必须进一步包含
Access-Control-Allow-Credentials: true
。请参见[此处][4]。请注意,这将强制执行Access-Control-Allow-Origin
的非通配符设置。参见[here][6]-这就是为什么在上面的第2点中,它必须显式地设置为类似http://localhost:3000
而不是*
的内容- 当服务器设置cookie时,它必须包含
SameSite=None; Secure; HttpOnly
。所以总的来说,像Set-Cookie: session_id=12345; SameSite=None; Secure; HttpOnly
。在最新的浏览器中,SameSite
似乎是一个相对较新的要求[5],当SameSite
设置为None
时,必须与Secure
一起使用- 关于
HttpOnly
,我还没有找到相关的材料,但在我的实验中,省略它会导致浏览器忽略Set-Cookie
标头- 对后端服务器的进一步请求也必须设置
credentials: 'include'
来源:https://stackoverflow.com/a/67001424/368691