在哪些情况下 HTTP_REFERER 会为空
有时候我们需要获取当前页面的前一个页面信息,在PHP里面,通过$_SERVER['HTTP_REFERER']
即可获取相关信息,配合使用parse_url()
函数,可以切割网址单独获取各部分信息。但referer
并非总是有效的,有几次这个问题困恼了我很久。
第一次碰到这个问题是因为浏览器原因导致,详情可参考我去年写的一篇文章:IE浏览器下HTTP_REFERER失效。
第二次是因为给网站设置了https访问,但跳转的链接还是http。
通过查阅相关资料,总结了下面这些情形,HTTP_REFERER 有可能为空(失效):
- 直接在浏览器地址栏输入网址访问
- 通过浏览器书签点击访问网站
- 在一个外部应用程序中点击链接访问
- 从 https 链接跳转到 http 链接
- 从 https 链接跳转到 另一个不同的 https 链接
- 服务器安装了诸如firewall、antivirus等安全软件,将referer过滤掉了
- 使用了过滤 referer 的代理服务器
- 通过诸如curl等程序访问网站,但未设置referer头
但需要注意的是,完全信任 HTTP_REFERER 是不推荐的,不仅因为该变量容易失效或为空,更在于该变量很容易被伪造。