我有一个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.com 和https://example.com 是相同的站点(即使不是相同的起源)。 |
|
跨站点 | 发出请求的原点和发出请求的代码的原点既不是同源,也不是同一站点,而是具有不同的可注册域。 | |
none | 该请求不是由前端代码以编程方式发起的(例如,不是通过XHR/fetch/ajax调用),而是由正常的用户导航发起的——也就是说,由用户直接在浏览器URL栏中输入地址,或者单击超链接。 |
Origin报头与CORS请求以及POST请求一起发送。在使用HEAD或GET
方法的Fetch请求中没有设置Origin报头:起源头