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

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

我有一个从 React 应用程序调用API 端点。 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,这意味着调用是在另一个网站/域中生成的?对吗?

参考:

sec-fetch-site: cross-site
sec-fetch-site: same-origin
sec-fetch-site: same-site
sec-fetch-site: none

解决方法

我有一个从 React 应用程序调用的 API 端点。该 API 位于同一域中。 ... 我期待在我的服务器日志中看到一个 Origin 标头。

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

好像已经进行了Origin检查

是的——浏览器知道:

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

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

// 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-headerSec-Fetch-Site 条信息。

Sec-Fetch-Site 值 值表示什么
同源 发出请求的来源与发出请求的代码的来源相匹配。
同一站点 发出请求的源和发出请求的代码的源具有相同的“可注册域”(有时也称为“相同的 eTLD+1 ”“相同有效的顶级域加一个”);因此,例如,https://subdomain.example.comhttps://example.com 是同一站点(即使不是同源)。
跨站 发出请求的源和发出请求的代码的源既不是同源也不是同一站点,而是具有不同的可注册域。
请求不是由前端代码以编程方式发起的(例如,不是由 XHR/fetch/ajax 调用发起)而是由普通用户导航发起的——也就是说,由用户执行诸如直接将地址放入浏览器网址栏,或点击超链接。

✳️ 导致在同源 Origin 请求中省略 GET 标头的规范要求:

是否添加 Origin 标头最终取决于请求的 “response tainting”,其值以“basic”开头,对于同源请求,提取算法保持设置为“basic”,按照 “Main fetch” algorithm 的第 12 步:

request 的当前 url 的来源与 request 的来源相同 来源,请求的响应污染是“basic
……

  1. 将请求的响应设置为“basic”。
  2. 返回运行 scheme fetch 给定 fetchParams 的结果。

运行 scheme fetch 会导致调用 append a request `Origin` header 算法,并且只有在以下至少一项为真时才会添加 Origin 标头:

  • 请求的响应污染为“cors
  • 请求的模式是“websocket
  • 请求的方法既不是 GET 也不是 HEAD

但是对于同源 GETs,响应污染不是“cors”(相反,根据上面的要求,它是“basic”),请求模式是't "websocket",当然请求的方法既不是 GET 也不是 HEAD(它是 GET);因此,该算法要求浏览器不要添加 Origin 标头。

,

Origin 标头与 CORS 请求以及 POST 请求一起发送。 使用 HEAD 或 GET 方法的 Fetch 请求上未设置 Origin 标头

来自: Origin header

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?