HttpOnly Cookie and fetch



如果选项中存在{credentials:"include"},是否使用Fetch API发送具有HttpOnly和Secure属性的cookie?

fetch("https://some.url", {
mode: "same-origin",
credentials: "include",
redirect: "manual"
})

有几个条件必须满足,但是的。

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

来源:https://stackoverflow.com/a/67001424/368691

最新更新