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

小歆10年前软件源码05767

问题场景

当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才是未来。

相关文章

VB代码优化的六条军规

       在优化程序代码大小的诸多技术中,大多包括从代码中删除不必要的元素。在编译应用程序时,Visual Basic自动删除某些元素。而标识符名称、...

VS 2017 Git failed with a fatal error的解决方案

VS 2017 Git failed with a fatal error的解决方案

问题现象这几天用刚装的VS2017写了个程序,在提交推送到Github过程中提示了“Git failed with a fatal error”错误,输出窗口的提示如下图: 解决方案经过一番折腾...

传感器技术手册

传感器技术手册

传感器技术手册 封面 简介        《传感器技术手册》从实用角度出发,全面讲述各类传感器的工作原理和设计应用。《传感器技术手册...

C语言 # 与 ## 的用法

一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include<cstdio>...

关于AutoCAD经常弹出安装窗口的解决办法

前言 先说说原因吧,网传是因为AutoCAD2007简体中文版的安装包中嵌入了某病毒程序,其关键库是dfst.dll文件,目前各大杀毒软件基本都能查出来,杀毒软件删除dfst.dll...

实现VB与EXCEL的无缝连接

  VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。因此有很多程序员现在已经充分利用EXECL的强大...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。