首页 > 其他分享 >[转帖]HTTP 请求头的 Referrer-Policy 到底是什么?

[转帖]HTTP 请求头的 Referrer-Policy 到底是什么?

时间:2024-03-04 14:14:56浏览次数:26  
标签:origin HTTP 请求 Referrer 转帖 Referer https example

https://juejin.cn/post/7005209278592073758

 

 

当我们打开 Chrome 的网络面板,查阅它的任意一个请求,可以看到,请求中有一个 General 选项。

除了第四个,前三个我们都很熟悉。今天我们就来介绍一下第四个到底是什么。

image.png

Referrer Policys 是 HTTP 的一个请求头,通常结合着 Referer 来使用。直接讲这个属性可能会有点懵,我们一点点的逐层深入,最后你会发现,我们可以通过这一个属性把很多东西串起来。

首先,我先带大家了解一下 Referer

如果你去查这个英文单词对应的意思,多半是查不到的,原因很好玩,是因为最初在文档里的时候写错了,后面就延续了下来,这是一个很乌龙的事件。

它真正对应的英文单词是 referrer 。意思是引用、介绍人。在 HTTP 协议中,它的作用是表示我们当前的请求来自于哪里。

另外,值得注意的是,我们的 Referrer Policys 里的 referrer 是拼写正确的,同样的,我们在 JavaScript 的环境中获取这个值的时候拼写也是正确的:

  js 复制代码
document.referrer
// "https://developer.mozilla.org" 
// 这只是个一个示例,真实的结果因页面而定。

在一次 HTTP 请求中,我们可以选择携带 Referer ,也可以选择不携带。Referer 是一串网址,代表了当前的请求是从哪里发起的。

假如我们当前在 https://ven.example 这个网页。

如果这个主页上面需要加载一个图片 a.png,那它的值就是 https://ven.example。如果这个网站上的 style.css 文件某个 CSS 样式的背景是一个图片,那当请求这张图片的时候, Referer 值的格式可能就是 https://ven.example/style.css

你想现在就看看吗?点击 F12 ,并打开 NetWork,随意的找几个请求看一下这个属性到底是什么。

在继续下面的内容之前,我们先来介绍一下 URL 中几个 常用的概念。

假设我们有这样一个 URL: https://www.example.com:443/course/user/?id=5

在上述 URL 中,https://www.example.com 是源(origin),course/user 是路径(path),?id=5 是查询参数(querystring)。

而一个源又可以拆分为协议(protocol)、主机名(hostname)、端口(port)。

三者全部相同就是同源(same-origin),其他的就是跨源(cross-origin)。

image.png

Referer 的值可以说是 URL 的子集,它的值可以包含 URL 上的源(origin)、路径(path),查询参数(querystring)。而它可以包含上述三者中的那一些,就要根据 Referrer Policys 的值来确定了。

那为什么要有一个请求头来专门控制 Referer 呢?是因为稍有不慎,就可能引发潜在的安全问题。

假设我们停留在这样一个网页:

  ini 复制代码
https://www.example.com/password_reset?username=wayne&token=12345

这时候,如果我们加载了一个图片,就会把这些信息携带在请求图片的 HTTP 请求的 Referer 里了。同样的,如果我们当前网站有一些外链,当我们点击这些外链的时候,也会把敏感信息带过去。

当然了,肯定不会有人这么不注意,在这里,只是为了表示这样的一个可能性。

现实生活中,泄露邮箱、用户名还是比较容易发生的:

  perl 复制代码
https://www.example.com/my-account/mysteryven
https://www.example.com/[email protected]

为此,就有了 Referrer Policys 这个属性来限制 Referer 的值可以包含哪些东西。

我们先来看它的一个属性 strict-origin

它的意思是当请求不出现协议降级的时候(HTTPS -> HTTP属于降级)。我们请求头的 Referer 可以发送,但只会携带网址中的 origin 部分。如果出现了协议降级,就不发送 Referer 这个请求头了。值得大家注意的是,HTTP -> HTTP 或 HTTPS -> HTTPS 都不属于降级。


协议降级是什么?

举一个例子,我们当前网址是 HTTPS 协议的(https//example.com),但我们请求了一个HTTP 协议的图片(http://xxx.com/a.png),这时候就出现协议降级了。


现在,Chrome 浏览器默认的值是 strict-origin-when-cross-origin

它的意思是:在同源的时候,Referer 信息中的 origin、path、querystring 信息都可以发送。但是在跨域的时候,要遵循和 strict-origin 一样的规则,不降级的时候,只发送 origin 部分,降级了就什么也不发送了。

篇幅原因,我就省略其他属性的解释了,如果您感兴趣,请移步 MDN

最后就是一些设置 Referer 的手段了:

第一种就是在请求头里面加;

第二种可以在我们的 HTML 文件里面指定一个 meta 标签:

  html 复制代码
<meta name="referrer" content="strict-origin-when-cross-origin" />

如果我们使用了上面两种方法设置 Referer,它会优选选择我们设定的值。没有设定才会去使用浏览器的默认值。

虽然浏览器有默认的值,但是我们不能保证所有浏览器的默认值都是安全的,并且有的浏览器还能手动改这个的值。所以,为了保护用户信息,保险期间,我们可以自己在所有的请求里加上一个我们认为保险的选项(一般来说 strict-origin-when-cross-origin 就够了)。

写这篇博客的起因是我在搭 Mock 服务的时候遇到了一个和 Referer 相关的报错,但是却对解决那个报错没有任何头绪。后来发现是因为自己开代理了,真的被自己蠢哭。不过这件事让我学到了这个请求头是什么意思,也算是因祸得福吧。

好了,今天我们主要是讲解了 HTTP 里的两个请求头的含义,希望能帮到你,谢谢阅读!

标签:origin,HTTP,请求,Referrer,转帖,Referer,https,example
From: https://www.cnblogs.com/jinanxiaolaohu/p/18051691

相关文章

  • httpsok-v1.8.0 SSL证书自动续签就应该这么简单
    ......
  • python接口自动化系列(09):发送http请求
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标发送http请求,获取服务器响应内容 关于被测试接口配套练习环境(含相关接口):https://www.cnblogs.com/uncleyong/p/17165143.html 安装模块requests提供了方便易用的HTTP请求功能pipinstall......
  • HTTP请求走私
    HTTP请求走私简介HPPT请求走私是一种干扰网站处理HTTP请求系列方式的技术,请求走私大多发生于前端服务器对客户端传入的数据理解不一致的情况。这是因为HTTP规范提供了两种不同的方法来指定请求的结束位置,即Content-Length和Transfer-Encoding标头。分类CLTE:前端服务器使用Cont......
  • rewrk一个更现代的http框架基准测试实用程序
    引言    rewrk一个更现代的http框架基准测试实用程序。HTTP基准测试(HTTPbenchmarking)是一种测量和评估HTTP服务器或应用程序性能指标的活动。其目的是在特定条件下模拟大量用户请求,以测量服务器或应用程序的响应能力、吞吐量、延迟等指标,从而评估其性能表现。HTTP基准测试通......
  • Windows安装node.js以及环境配置、常见npm镜像源、npm安装包报错 解决https证书过期 r
    一、Windows安装node.js以及环境配置1、下载Node.js安装包Node.js官方网站,选择LTS版本或者最新版本,然后点击下载按钮。.msi是软件安装包、.zip是压缩包,解压之后即可,不需要安装2、运行安装程序下载完成后,双击安装包运行安装程序。安装完成后,在Node的安装目录下创建两个......
  • IIS10 隐藏 http server、删除 Windows Server IIS 10 和 ASP.NET 中的 HTTP 响应标头
    一、方案1IIS10.0中的removeServerHeaderrequestFiltering在IIS10.0(WindowsServer2016/2019)中,您可以通过在system.webServer节点中配置requestFiltering来移除Server标头:web.config<security><requestFilteringremoveServerHeader="true"/></securit......
  • 聊聊 HTTP 性能优化
    哈喽大家好,我是咸鱼。作为用户的我们在"上网冲浪"的时候总是希望快一点,尤其是抢演唱会门票的时候,但是现实并非如此,有时候我们会遇到页面加载缓慢、响应延迟的情况。而HTTP协议作为互联网世界的基础,从网站打开速度到移动应用的响应时间,HTTP性能的优化直接关系到我们在网络世......
  • 解决Nginx代理转发中HTTP到HTTPS跳转问题的技术方案解析
    在进行Nginx代理转发时,经常会遇到HTTP到HTTPS跳转的问题,特别是在某些情况下,即使在程序中明确指定了使用HTTPS协议,仍然会出现跳转到HTTP的情况。本文将介绍一种解决这个问题的技术方案,并对问题的原因进行分析。问题描述在进行Nginx代理转发时,配置了HTTPS支持,但在程序中发起请求时......
  • Go 100 mistakes - #81: Using the default HTTP client and server
        ......
  • 求求你别再用OkHttp调用API接口了,快来试试这款HTTP客户端库吧
    引言在日常业务开发中,我们时常需要使用一些其他公司的服务,调用第三方系统的接口,这时就会涉及到网络请求,通常我们可以使用HttpClient,OkHttp等框架去完成网络请求。随着RESTfulAPI的普及,一个高效、简洁且易于维护的HTTP客户端库显得尤为关键。而本文主要介绍一款强大的网络客户端......