浏览器请求的头文件中的Sec-Fetch-Site、Sec-Fetch-Mode、Sec-Fetch-Dest 和 Sec-Fetch-User字段的运作机制是怎样的?

浏览器发起请求的头文件中的Sec-Fetch-Site、Sec-Fetch-Mode、Sec-Fetch-Dest 和 Sec-Fetch-User字段的运作机制是怎样的?

喜欢这个问题 | 分享 | 新建回答

回答

喷火的尾巴

Apr 8, 2024
2 赞

Sec-Fetch-Site、Sec-Fetch-Mode、Sec-Fetch-Dest和Sec-Fetch-User这四个字段是浏览器在发起网络请求时自动添加到请求头中的,用于提供关于请求的安全和上下文信息。这些字段帮助服务器更精确地判断请求的合法性,从而增强web服务的安全性。以上四个字段,JavaScript无法干预。以下是对这四个字段的详细解释:

Sec-Fetch-Site:

含义:此字段表示请求发起者的来源与目标资源来源之间的关系。

取值:可能的值包括same-origin(同源请求),cross-site(跨域请求)和none(不是同源也不是跨域,请求与任意上下文无关,例如浏览器窗口中拖放一个文件)。

运作机制:浏览器在发起请求时,会根据请求的发起页面和目标资源的URL来判断并设置这个字段的值。服务器可以根据这个字段来判断请求是否来自可信的源,从而决定是否接受该请求。

Sec-Fetch-Mode:

含义:此字段表明了一个请求的模式。

取值:常见的值包括cors(跨域请求)和no-cors(限制请求只能使用特定的请求方法和请求头)。

运作机制:浏览器根据请求的上下文(例如是否是通过<script>标签发起的跨域请求,或者是通过fetch API发起的请求等)来设置这个字段的值。服务器可以使用这个字段来确保请求遵循了预期的跨域策略。

Sec-Fetch-Dest:

含义:此字段表示请求的目的地,即如何使用获取的数据。

取值:可能的值包括document(期望获取HTML文档),image(期望获取图像资源)等,具体取决于请求的预期用途。

运作机制:浏览器根据请求的上下文(例如请求的URL、请求的发起元素等)来设置这个字段的值。服务器可以使用这个字段来验证请求的用途是否符合预期,从而防止潜在的安全风险。

Sec-Fetch-User:

含义:此字段表明一个导航请求是否由用户激活触发(如用户主动点击鼠标、键盘操作等)。

取值:通常是一个布尔值,true表示请求是由用户主动触发的,false表示请求是被动触发的。

运作机制:浏览器根据用户的交互行为来设置这个字段的值。服务器可以使用这个字段来判断请求是否来自真实的用户操作,从而防范自动化脚本或机器人的攻击。

这四个字段共同提供了关于请求的安全和上下文信息,使得服务器能够更准确地判断请求的合法性。通过这种方式,它们增强了web服务的安全性,并有助于杜绝非法请求和攻击。需要注意的是,这些字段的值是由浏览器自动设置的,JavaScript通常无法直接干预这些字段的值。



以上回答引用自百度文心一言生成。但是回答的并不完全,上述的关于四个字段的含义说的是对的,但是取值,并不完全准确,不同的浏览器还会有各自的取值特性。比如chrome浏览器关于Sec-Fetch-User的取值就不是false或true,而是“?1”。