HTTP 首部字段之referer和Referrer Policy

referer

1.定义
浏览器在向 web 服务器发送一个 http 请求的时候,服务器会把 http 的请求包装成一个 request 对象,在这些请求里面就包括 referer,它的意思是要告诉服务器,该请求来自哪里。
举个栗子:
www.google.com 页面中重定向至 www.baidu.com,点击转到百度,浏览器就会发一次请求,hearder信息有 referer=http://www.google.com

这里有一个小问题要说明下。
Referer 的正确英语拼法是referrer 。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。其它网络技术的规范企图修正此问题,使用正确拼法,所以目前拼法不统一。还有它第一个字母是大写。

2.referer的作用

1.防盗链:

比如我只允许我自己的网站访问我自己的图片服务器,那我的域名是 www.google.com ,那么图片服务器每次取到Referer来判断一下是不是我自己的域名 www.google.com,如果是就继续访问,不是就拦截。

2.防止恶意请求:

在接口中判断访问来源,例如php使用HTTP_REFERER来判断来源,如果是直接访问接口的请求不予处理,如果是从网页调用的请求再做处理。

然而在这里又有一个问题,referer是否为空和referer的值的不同。–>控制referer有两个方面的条件:
其一:请求方式和重定向的方法

能获取到referer的情况:

  1. 使用A标签来访问页面
  2. submit input提交的表单post和get
  3. 使用js提交的post和get表单

不能获取的referer的情况:

  1. 使用js重定向 location.href 和 location.replace()
  2. 服务器端的redirect,PHP中的header(“location:”)
  3. 使用http重定向(我开始做的就是http重定向的项目,所以得不到referer参数)
  4. 直接在浏览器的地址栏中输入一个资源的URL地址

其二:Referrer Policy指令的控制

下面介绍一下

Referrer Policy

1.定义:
字段设置于general(通用头部)中,用来控制request headers(请求头部)中的referer(referer表示一个来源,例如:referer: https://www.cnblogs.com/),
比如是否发送 referer、只发送 hostname 还是发送完整的 referer 等。

在这里插入图片描述

2.作用:
Referrer Policy来控制referer的显示,以此维护用户的隐私和安全。
3.怎么维护:
这就涉及到了referer的原理referer表示一个来源,也就是一个域名,它是浏览器自动添加给header中的,并且通过浏览器自动传递到 下去,不管是几重定向,找到都是最终的源地址,但是这个地址上可能会保留用户的个人信息,泄露用户页面的URL,由此我们需要控制referer的展示。

Referrer Policy的指令
指令说明
no-referrer任何情况下都不发送referer,访问来源信息不随着请求一起发送
no-referrer-when-downgrade在同等安全等级下(例如https页面请求https地址),发送referer,但当请求方低于发送方(例如https页面请求http地址),不发送referer
origin在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。
origin-when-cross-origin对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源。
same-origin对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。
strict-origin在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS),但是在降级的情况下不会发送 (HTTPS->HTTP)。
strict-origin-when-cross-origin对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)。
unfafe-url无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。这项设置会将受 TLS 安全协议保护的资源的源和路径信息泄露给非安全的源服务器。不推荐使用
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值