我之前在foo.php中使用过referrer来判断iframing foo.php的页面是否属于特定的URL。 (使用$_SERVER['HTTP_REFERER']
)
事实证明,大部分时间,它都有效(大约98%的时间),但似乎有些用户到达页面并且$_SERVER['HTTP_REFERER']
未设置在foo.php中,因此打破了码。 [更新:这些用户声称他们遵循通常的页面流程并且没有在浏览器上使用foo.php的URL(他们让它成为iframe)并且用户永远不会改变了他们的浏览器设置。]
我想知道它可能发生的原因是什么?
答案 0 :(得分:6)
HTTP/1.1 RFC并不强制要求发送HTTP referer标头。在编写健壮的代码时,您无法对其存在做出任何假设;完全符合标准的浏览器可能不包括它。
此外,RFC建议“如果从没有自己的URI的源获取Request-URI,则不得发送Referer字段,例如来自用户键盘的输入” ,和“我们建议,但不要求,为用户提供方便的切换界面,以启用或禁用发送From和Referer信息”。
后者并不常见(尽管某些浏览器具有满足要求的“私有”模式)。 2%的可能性是人们为URL添加了书签,该URL符合第一个条件(从没有URI的源获取的URI),因此浏览器不会发送任何引用。
答案 1 :(得分:1)
默认情况下不是AFAIK,但很容易将其关闭(保密),例如在Firefox中通过about:config,当然有些用户可能正在使用这种设置分发给他们的浏览器(例如由他们的IT部门)。因此,您应该尽量避免依赖REFERER进行任何重要功能(当然,因为它拼写错误; - )。