gpt4 book ai didi

http-headers - sec-fetch-site header 是什么意思?为什么 Origin header 未定义?

转载 作者:行者123 更新时间:2023-12-04 12:15:59 32 4
gpt4 key购买 nike

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

https://www.example.com
https://www.example.com/api/update-something
我用 cross-fetch做那个请求。
我期待看到 Origin我的服务器日志上的 header 。事实上,我期待看到 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

    最佳答案

    I have an API endpoint that I call from my React app. That API is on the same domain. … I was expecting to see an Origin header on my server logs.


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

    it's like the Origin check was already made


    是的——浏览器知道:
  • 发出请求的代码的来源
  • 发出请求的资源的来源
  • 请求方式

  • ...浏览器会在决定是否添加 Origin 之前检查所有这些标题;他们没有添加 Origin header ,如果来源匹配并且方法是 GET .
    // AND I ALSO GET THESE HEADERS
    "sec-fetch-dest":"empty",
    "sec-fetch-mode":"cors",
    "sec-fetch-site":"same-origin"

    What do they mean? … For example: if I get sec-fetch-site: cross-site it means that the call was generate in another website/domain? Is that correct?


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


    Sec-Fetch-Site 值
    该值表示什么


    同源
    发出请求的来源与发出请求的代码的来源相匹配。

    同站
    发出请求的源和发出请求的代码的源具有相同的“可注册域”(有时也称为“相同的 eTLD+1”或“相同的有效顶级域加一个”) ;例如, https://subdomain.example.comhttps://example.com是同一个站点(即使不是同源的)。

    跨站
    发出请求的来源和发出请求的代码的来源既不是同源也不是同一站点,而是具有不同的可注册域。

    没有任何
    该请求不是由前端代码以编程方式发起的(例如,不是由 XHR/fetch/ajax 调用发起)而是由普通用户导航发起的——也就是说,由用户执行类似直接将地址放入浏览器 URL 栏的操作,或单击超链接。


    ✳️ 规范要求导致 Origin同源中要省略的 header GET要求:
    是否 Origin添加的 header 最终取决于请求的 “response tainting” ,其值以“ basic”开头,对于同源请求,Fetch 算法保持设置为“ basic”,按照 “Main fetch” algorithm 的第 12 步:

    request’s current url’s origin is same origin with request’sorigin, and request’s response tainting is "basic"

    1. Set request’s response tainting to "basic".
    2. Return the result of running scheme fetch given fetchParams.

    运行 scheme fetch导致 append a request `Origin` header算法被调用,这会导致 Origin仅当以下至少一项为真时才添加 header :
  • 请求的响应污染是“cors
  • 请求的模式是“websocket
  • 请求的方法既不是 GET也不是 HEAD

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

    关于http-headers - sec-fetch-site header 是什么意思?为什么 Origin header 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66115532/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com