回顾: Referer是表示请求是从'哪个网址'跳转过来的,请求的源站;一般在'图片'、或者'超链接'中
① 背景
现象:
1)请求流: client --> APIGATEWAY --> nginx --> 后端服务
2)发现在'给客户端的响应中',也即'浏览器'中有'Referrer-Policy'响应头,'不符合'预期的
3)排查: 'Referrer-Policy'是在哪里引入的?
4)临时解决: 在nginx中'增加'proxy_hide_header Referrer-Policy '隐藏'上游的响应头
② Referrer-Policy解读
1) Referrer-Policy 是一个 '响应头'
2) 作用:控制'请求头'中的'Referer'的内容
3) 现状:目前是w3c官方剔出的一个'候选标准',不过有'部分浏览器'支持该标准,不是一个'通用头'
4) 通俗:规范Referer,规定'什么时候发送Referer 请求头'字段? 以及'发送哪些信息'?
③ 语法
④ Referrer-Policy 各个值的解读
⑤ 为什么要严格控制Referer
1) Referer 参数其实就告诉了'链接的请求'来源于'哪个'网站
场景: 所以可以根据这个特性,'限制一些接口'只能'特定网站'的才能调,外部网站不能调。
2) 这个参数常常是跟'同源策略'和'跨域请求'关联在一起
场景:
[1]、因为现在普遍都是'前后端分离'项目
[2]、前端页面的地址和后端 api 接口地址是'跨域'的
[3]、为了让'后台接口'判断是不是合法请求
[4]、除了前端在请求头中'加上Authorization字段',后台也可通过'Referer'字段判断请求来源
3) 另外,在 'CSRF 攻击的防范'中
场景:除了 SameSite Cookie,CSRF token 等方法,Referer 字段判断请求来源也是一种防范手段
⑥ Referrer-Policy 使用方法
1)HTML中集成
2)CSS中集成
3)JS中集成
<script>
fetch(url, {referrerPolicy: "strict-origin-when-cross-origin"});
</script>
⑦ 未经验证的浏览器解析顺序
Referrer-Policy是有一个'优先级顺序'的:
1)Element-level policy
2)Page-level policy
3)Browser default
解读:
1)元素级别的策略优先级最高,页面级别的次之,浏览器'默认值'最低
2)所以,可以先设置一个较'严格的页面级'策略再对'某些资源'做渐进'增强'
⑧ fallback p[olicy
⑨ Firefox浏览器设置
⑩ 浏览器兼容性