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

小歆8年前软件源码03724

问题场景

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

相关文章

C# 菜单图标错位的解决办法

C# 菜单图标错位的解决办法

问题现象该问题出现在Windows高分屏的开发环境中,如果用到Checked功能,默认对号图标会出现错位的情况,如下图所示: 解决方案在用到菜单图标或Checked功能的菜单属性中,设置 Aut...

C语言宏定义的用法

宏定义的用法 注意:宏定义不是函数!! 一般用来简化操作的,但又能避免函数调用那样需要进行切换环境,花费时间。例如: #define max (a,b...

VB操作INI文件方案

VB读写ini文件(1) 自从注册表诞生以来ini文件正在逐渐失去其市场占有率,然而基于ini文件的独立性,致使其还没有到达退出历史舞台的地步,很多应用程序的初始化和一些界面参数的设置仍然很愿意...

PCB布线技巧及其要领

    布线是PCB设计过程中的一个重要环节,所有的前期准备工作都是为它而做的,而在整个PCB设计过程中,就属布线的设计过程技巧最细、限定最高。PCB布线有单面、双面及多层布...

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

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

VB格式输出函数Format的使用

VB格式输出函数可以使数值、日期或字符串按指定的格式输出。其格式为: Format(<表达式>[, <格式字符串>])...

发表评论    

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