当request.referer
没有返回任何内容时,这是否总是意味着访问者没有通过链接进行请求 - 即她以某种方式手动输入了请求页面的地址?
或者是否有其他情况request.referer
返回nil
(假设请求成功)?
简短回答:不。
一般来说,引用者 - 像所有其他HTTP标头一样 - 是用户提交的数据。不应信任用户提交的数据。
在我的脑海中,我可以想到这些场景,如果没有用户手动输入 URL,就不会设置引荐来源网址。
- 单击电子邮件客户端中的链接。
- 使用删除引荐来源的隐私软件。
- 机器人/蜘蛛可能不会设置此标头。
- 跟踪从 HTTPS 站点到 HTTP 站点的链接。
很可能还有其他情况(fx我不确定浏览器在新窗口中打开链接时如何处理引荐来源网址)。
还有一些情况是设置了引荐来源,但没有用户输入地址;特别是机器人 - 尤其是引荐来源垃圾邮件。
我还没有验证过,但始终安全的不是检查nil
的空白值,而是使用blank?
request.referrer.blank?
这确保了当它是 nil 或空白字符串时的情况。