HTTP Referer并不总是被传递

时间:2011-04-13 02:31:28

标签: php referer

我有一个记录用户访问的应用程序。这些访问都不是直接访问的,这些访问的100%是从另一个站点引用的。

我将$_SERVER['HTTP_REFERER']传递给数据库。大约35%的记录主菜通过了参考,其余的都是空白。

这是否有原因?

6 个答案:

答案 0 :(得分:16)

HTTP_REFERER可能为空的原因有很多。

  1. 您必须了解它是浏览器给出的环境变量。意味着用户可以删除它,甚至可以更改它,如果他们愿意的话。
  2. 从书签,历史记录或手动输入链接访问链接的用户没有引用。
  3. IE也被称为在围绕javascript的情况下删除引用者。例如window.openwindow.location甚至在锚点或target="_blank"设置meta refresh
  4. 点击聊天应用程序中的嵌入式链接,PDF / Word / Excel文档,也不会设置引用。
  5. 使用AJAX,file_get_contentsfopen和其他语言中的其他类似函数可能不会设置引用请求。
  6. cURL,fsockopen,具有类似浏览器的组件的应用程序可能不会设置引用。
  7. 可能发生这种情况的情况可能更多,如果我能想到任何合理的话,我会更新。

答案 1 :(得分:9)

如果用户直接访问您的网站,则没有推荐人。它们也可能已经设置好,因此他们的浏览器永远不会发送引荐来源。

根据this answer,浏览器必须在进行元刷新时发送引荐来源。

答案 2 :(得分:2)

浏览器有时会在请求中包含referer。但这并非强制要求(referer是100%自愿的)。确实referer存在各种隐私和安全问题(例如,如果HTTPS站点引用您的HTTP站点,则浏览器不应将引用站点包含为referer)。所以不要依赖它。

答案 3 :(得分:1)

在Internet Explorer 4.0及更高版本中从一个文档链接到另一个文档时,当链接从HTTPS页面到非HTTPS页面时,将不会发送Referer标头。当链接从非HTTP(S)协议(例如file://)到另一个页面时,也不会发送Referer标头。有关详细信息,请转到此link

答案 4 :(得分:0)

  1. 直接访问您的网页(在地址栏中输入网址或从书签,历史记录等中输入网址)
  2. 浏览器设置(已禁用引荐来源或空白)
  3. 如果有人请求具有file_get_contents()功能的页面内容......

答案 5 :(得分:0)

当你被发现为什么缺少它时很常见: - 有时你的推荐人是https而你是http,它会丢失。

否则: - 通过直接输入URL来访问用户。 - 用户已添加书签并来自书签。 - 有时用户保留浏览器的url默认值(类似书签) - 代理冲浪可能会删除引用者。 - 作为机器人(搜索引擎)访问网站