关于Referrer-Policy的设定与网站转址问题(笔记用)

同事碰到的问题:
在同一个环境下分别连接到http与https开头的A系统网址,
在使用http时可以正常显示,但使用https时,会出现403错误。
会有这样的问题,和网站的Referrer-Policy设定有关联,
在了解问题前,先笔记一下关于HTTP Referer与Referrer-Policy的资料。

什么是HTTP Referer

HTTP Referer是HTML中,标头(Header)所记载的其中一项资讯,
用来标示目前发出请求的网站来源,会被记录成一个网址。
下图是我在购物网站搜寻「针织外套」的搜寻结果页面,
可以在Header中看到这个页面的Referrer来自于该购物网站,
另外夹带了我搜寻的关键字资料。
http://img2.58codes.com/2024/20149099tlddGYN646.png

由于这是在站内搜寻,所以风险较小,但若是网站存在外部连结时,
光是来源的网址资讯,就有可能揭露出较为私人的讯息,
这时候可以设定Referrer-Policy来控制referrer要显示的资讯。

Referrer-Policy

下面是Referrer-Policy参数的类型:

no-referrer
所有请求都不包含referrer。

no-referrer-when-downgrade(预设值)
在同样使用HTTPS协定时,referrer会显示请求端的完整网址,
但若是在安全级别降级的情况下(HTTPS->HTTP),就不发送referrer。

origin
所有请求都只发送请求端的根网址。
例如https://example.com/page.html 会将 https://example.com/ 作为referrer的值。

origin-when-cross-origin
对于相同来源的请求(例如站内搜寻),会显示请求端的完整网址,
若是非相同来源的请求,就只发送请求端的根网址。

same-origin
对于相同来源的请求,会显示请求端的完整网址,
若是非相同来源的请求,就不发送referrer。

strict-origin
在同样使用HTTPS协定时,会发送请求端的根网址,
但是在安全级别降级的情况下(HTTPS->HTTP)就不发送referrer。

strict-origin-when-cross-origin
对于相同来源的请求,会显示请求端的完整网址,
同样使用HTTPS协定时,会显示请求端的根网址,
但在安全级别降级的情况下,就不发送referrer。

unsafe-url
所有请求都发送完整的URL网址。

----

回到一开始的问题,客户提供的环境为https,
A系统的Referrer-Policy设定为no-referrer-when-downgrade,
该系统有设定从特定的网址送出的请求才能正常显示网页,否则就回传403错误。
当下使用的环境没有在A系统设定的白名单内,
在点选http的系统超连结时,因为安全级别降级(HTTPS->HTTP)的缘故,
浏览器不夹带referrer,A系统未能针对来源referrer做判断,所以可以正常浏览,
但点选https系统超连结时,使用了相同的安全级别(HTTPS->HTTPS),
夹带的referrer网址被判断并未在白名单当中,所以就显示403错误。

解决的方式为:把客户环境的Domain增设进A系统的白名单中,
这样所有从客户端环境发出的请求,就都可以正常显示了。

以上资料参考于
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Referrer-Policy
https://andy850701.pixnet.net/blog/post/563519070-%E3%80%90http%E3%80%91referrer-policy-%E4%BB%8B%E7%B4%B9
https://blog.51cto.com/u_15047490/4154458
以及同事详细精美的测试笔记


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章