sec-fetch-site 标头是什么意思?为什么 Origin 标头未定义?

cbd*_*per 11 same-origin-policy http-headers cors fetch-api sec-fetch-site

我有一个API从我的 React 应用程序调用的端点。那API是在同一个域上。就像是:

https://www.example.com
https://www.example.com/api/update-something
Run Code Online (Sandbox Code Playgroud)

我曾经这样cross-fetch做过这个要求。

我希望Origin在我的服务器日志上看到一个标头。事实上,我很期待看到Origin: https://www.example.com

但这是我得到的:

Origin: undefined

// AND I ALSO GET THESE HEADERS

"sec-fetch-dest":"empty",
"sec-fetch-mode":"cors",
"sec-fetch-site":"same-origin"
Run Code Online (Sandbox Code Playgroud)

他们的意思是什么?好像Origin已经查过了?

例如:如果我得到sec-fetch-site: cross-site它意味着调用是在另一个网站/域中生成的?那是对的吗?

参考:

Sec-Fetch-Site: cross-site
Sec-Fetch-Site: same-origin
Sec-Fetch-Site: same-site
Sec-Fetch-Site: none
Run Code Online (Sandbox Code Playgroud)

sid*_*ker 26

\n

我有一个从 React 应用程序调用的 API 端点。该 API 位于同一域中。\xe2\x80\xa6 我希望Origin在我的服务器日志上看到一个标头。

\n
\n

根据 Fetch 规范要求,浏览器不会发送Origin同源GET请求。\xe2\x9c\xb3\xef\xb8\x8f

\n
\n

就像已经进行了 Origin 检查

\n
\n

是的 \xe2\x80\x94 浏览器知道:

\n
    \n
  • 发出请求的代码的来源
  • \n
  • 发出请求的资源的来源
  • \n
  • 请求方法
  • \n
\n

\xe2\x80\xa6和浏览器在决定是否添加Origin标头之前检查所有这些;Origin如果来源匹配且方法为 ,则它们不会添加标头GET

\n
\n
// AND I ALSO GET THESE HEADERS\n"sec-fetch-dest":"empty",\n"sec-fetch-mode":"cors",\n"sec-fetch-site":"same-origin"\n
Run Code Online (Sandbox Code Playgroud)\n

他们的意思是什么?\xe2\x80\xa6 例如:如果我得到sec-fetch-site: cross-site它意味着调用是在另一个网站/域中生成的?那是对的吗?

\n
\n

https://w3c.github.io/webappsec-fetch-metadata/#sec-fetch-site-header有详细信息:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n
Sec-Fetch-Site 值该值表示什么
同源发出请求的来源与发出请求的代码的来源相匹配。
同站点发出请求的来源和发出请求的代码的来源具有相同的\xe2\x80\x9c 可注册域\xe2\x80\x9d(有时也称为\xe2\x80\x9csame eTLD+1 \xe2\x80\x9d\xe2\x80\x9c 相同有效顶级域加一\xe2\x80\x9d ); 例如,https://subdomain.example.comhttps://example.com是同站点的(即使不是同源的)。
跨站点发出请求的来源和发出请求的代码的来源既不是同一来源,也不是同一站点,而是具有不同的可注册域。
没有任何该请求不是由前端代码以编程方式发起的(例如,不是通过 XHR/fetch/ajax 调用),而是由普通用户导航 \xe2\x80\x94 发起,即由用户执行类似的操作直接将地址输入浏览器地址栏,或单击超链接。
\n

\n

\xe2\x9c\xb3\xef\xb8\x8f 规范要求导致Origin同源GET请求中省略标头:

\n

是否Origin添加标头最终取决于 request\xe2\x80\x99s \xe2\x80\x9cresponse tainting\xe2\x80\x9d,其值以“ basic”开头,对于同源请求,根据\xe2\x80\x9cMain fetch\xe2\x80\x9d 算法basic的第 12 步,Fetch 算法保持设置为“ ” :

\n
\n

\xe2\x86\xaa请求\xe2\x80\x99s 当前 url\xe2\x80\x99s 源与请求\xe2\x80\x99s\norigin相同,并且请求\xe2\x80\x99s 响应污染为 " basic"
\ n\xe2\x80\xa6

\n
    \n
  1. 将 request\xe2\x80\x99s 响应污染设置为“ basic”。
  2. \n
  3. 返回运行给定fetchParams的方案 fetch的结果。
  4. \n
\n
\n

运行schema fetch会导致调用追加请求“Origin”标头算法,并且Origin只有在满足以下至少一项条件时才会添加标头:

\n
    \n
  • request\xe2\x80\x99s 响应污染是“ cors
  • \n
  • request\xe2\x80\x99s 模式为“ websocket
  • \n
  • request\xe2\x80\x99s 方法既不是也不GETHEAD
  • \n
\n

但是对于 same-origin GET,响应污染是 \xe2\x80\x99t cors(更确切地说,根据上面的要求,它是 \xe2\x80\x99s basic),请求模式是 \xe2\x80\x99t websocket,当然方法是\xe2\x80\x99t 既不也不GET( HEADit\xe2\x80\x99s GET); 因此,该算法要求浏览器不添加Origin标头。

\n