sec-fetch-site报头是什么意思?为什么原点头未定义?



我有一个API端点,我从我的React应用程序调用。该API是在同一域。比如:

https://www.example.com
https://www.example.com/api/update-something

我用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"

它们是什么意思?好像Origin检查已经完成了?

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

参考:

  • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-Fetch-Site
Sec-Fetch-Site: cross-site
Sec-Fetch-Site: same-origin
Sec-Fetch-Site: same-site
Sec-Fetch-Site: none

我有一个API端点,我从我的React应用程序调用。该API是在同一域。我期待在我的服务器日志上看到一个Origin头。

浏览器在同源GET请求中不发送Origin,根据Fetch规范要求。✳️

就像原点检查已经完成了

是-浏览器知道:

  • 发出请求的代码的来源
  • 正在请求的资源的来源
  • 请求方法

…,浏览器在决定是否添加Origin标头之前检查所有这些;如果来源匹配并且方法是GET,他们不会添加Origin头。

// AND I ALSO GET THESE HEADERS
"sec-fetch-dest":"empty",
"sec-fetch-mode":"cors",
"sec-fetch-site":"same-origin"

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

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

Sec-Fetch-Site value 值的含义
same-origin 发送请求的原点与发出请求的代码的原点相匹配。
同一站点 发出请求的来源和发出请求的代码的来源具有相同的"可注册域名"(有时也称为"相同eTLD+1 ""相同有效顶级域名加1 ");因此,例如,https://subdomain.example.comhttps://example.com是相同的站点(即使不是相同的起源)。
跨站点 发出请求的原点和发出请求的代码的原点既不是同源,也不是同一站点,而是具有不同的可注册域。
none 该请求不是由前端代码以编程方式发起的(例如,不是通过XHR/fetch/ajax调用),而是由正常的用户导航发起的——也就是说,由用户直接在浏览器URL栏中输入地址,或者单击超链接。

Origin报头与CORS请求以及POST请求一起发送。在使用HEAD或GET

方法的Fetch请求中没有设置Origin报头:起源头

最新更新