在什么情况下HTTP_REFERER不起作用?

nop*_*ole 2 http-referer

我之前在foo.php中使用过referrer来判断iframing foo.php的页面是否属于特定的URL.(使用$_SERVER['HTTP_REFERER'])

事实证明,大部分时间,它工作(大约98%的时间),但似乎有些用户到达页面,$_SERVER['HTTP_REFERER']并没有设置在foo.php,因此打破了代码.[ 更新:这些用户声称他们遵循通常的页面流程并且没有在浏览器上使用foo.php的URL(他们让它成为iframe)并且用户从未改变他们的浏览器设置.]

我想知道它可能发生的原因是什么?

Ada*_*ght 6

HTTP/1.1 RFC不作强制要求发送一个HTTP引用头.在编写健壮的代码时,您无法对其存在做出任何假设; 完全符合标准的浏览器可能不包括它.

此外,RFC建议"如果Request-URI是从没有自己的URI的源获得的,则必须不发送Referer字段,例如来自用户键盘的输入","我们建议,但不要求,为用户提供方便的切换界面,以启用或禁用发送From和Referer信息".

后者并不常见(尽管某些浏览器具有满足要求的"私有"模式).2%的人更可能是人们为URL添加了书签,这符合第一个标准(从没有URI的源获得的URI),因此浏览器不会发送任何引用.