从Https跳转到Http时不传递HTTP_REFERER的解决方案

0.168字数 303阅读 2951

问题场景

当http页面通过Referer获取上一个页面的URL时,如果上一个页面是https,则得到的Referer为空。

例如在http页面的PHP代码中使用:$_SERVER['HTTP_REFERER']

得到的结果是:NULL

原因

根据RFC文档:HTTP/1.1: Security Considerations

Clients SHOULD NOT include a Referer header field in a (non-secure) HTTP request if the referring page was transferred with a secure protocol.

在Https -> Http的过程中Referer是不被传递的,而在 Https -> Https 或 Http -> Https 则没有这样的问题。

解决方案

1、Https端解决方案

增加一个Meta头信息,来建议浏览器发送Referer,这并不是HTTP强制要求的,不排除有个别浏览器不去这么做。

<meta content="always" name="referrer">

2、Http端解决方案

只用将全站升级成Https,否则没有办法。

总结

总的来说出现这个问题是HTTP安全性的结果,可以防止Https页面信息以明文暴露出来。综合考虑增加Meta只能作为临时方案(因为牺牲了安全性),长远打算还是将全站升级成Https吧,毕竟Https才是未来。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
  • http://www.91ri.org/tag/fuzz-bug 通常情况下,有三种方法被广泛用来防御CSRF攻击...
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
  • 用双亲卸去了滑落的泪痕­ 也遮住了颤抖的哽咽­ 慢慢地闭上眼睛­ 是的,昨天…­ 用琴瑟聆听心灵的呓语­ 也在呢喃...
  • 对于我爸爸来说,算是生命中的一部分