【问题标题】:How does refer(r)er work technically?refer(r)er 在技术上是如何工作的?
【发布时间】:2011-03-05 05:39:13
【问题描述】:

我不明白:网络服务器和像 Google Analytics 这样的跟踪器如何能够跟踪推荐?

它是 HTTP 的一部分吗?

这是浏览器的一些(未)指定行为吗?

显然,每次您单击网页上的链接时,原始网页都会随请求一起传递。

这背后的确切机制是什么?它是由某些规范指定的吗?

我已经阅读了一些文档,并使用了我自己的 Tomcat 服务器和我自己的 Google Analytics 帐户,但我不明白“魔法”是如何发生的。

奖励(完全相关)问题:如果我在我自己的网站(由 Tomcat 提供服务)上放置了指向另一个网站的链接,那么在没有我在 Tomcat 中做任何特别的事情的情况下,其他网站是否会将我的网站视为“引荐来源”?

【问题讨论】:

  • @Marcel Korpel:现在这是一个很棒的编辑,我希望人们能给编辑投票:)
  • 哇,我的问题花了 23 分钟和 3 票赞成,我没想到会这样(显然,对于像我这样的一些人来说,这是 HTTP 规范中相对未知的部分 :)!向所有人 +1(几乎同时回答所有问题)
  • 哈哈,谢谢,NP;它基本上只是右键单击 Firefox 中所有带有红色下划线的不稳定单词。 ;)

标签: html http-referer


【解决方案1】:

Referer(在规范中拼写错误)是一个 HTTP 标头。它是所有主要 HTTP 客户端都支持的标准标头(尽管某些代理服务器和防火墙可以配置为剥离或破坏它)。当您点击一个链接时,您的浏览器会发送一个 HTTP 请求,其中包含所请求的页面以及在其中找到该链接的页面等。

由于这是一个客户端/请求标头,因此服务器是无关紧要的,是的,单击托管在您自己服务器上的页面上的链接会导致该页面的 URL 被发送到其他站点的服务器,尽管您的服务器可能不会必须可以从其他站点访问,具体取决于您的网络配置。

【讨论】:

  • 另外值得注意的是,嵌入在页面中的元素将发送带有嵌入其中的父页面的标题。
【解决方案2】:

添加一个关于浏览器如何发送它的内容的细节:HTTPS 稍微改变了行为。我不知道它是否在任何规范中,但是如果您从 HTTPS 跳转到 HTTP,并且如果您留在同一个域或转到不同的域,那么有时不会发送引荐来源网址。我不知道确切的规则,但我在野外观察到了这一点。如果对此有一些规范或描述,那就太好了。

编辑:好的,RFC 说得很清楚:

如果引用页面是使用安全协议传输的,则客户端不应在(非安全)HTTP 请求中包含Referer 标头字段。

因此,如果您从 HTTPS 页面转到 HTTP 链接,则不会发送引荐来源网址信息。

【讨论】:

  • 太棒了,这比我问的要多,而且非常有趣,+1 :)
【解决方案3】:

发件人:http://en.wikipedia.org/wiki/HTTP_referrer

referrer 字段是可选部分 发送的 HTTP 请求 浏览器程序到网络服务器。

来自 RFC 2616:

Referer[sic] 请求头字段 允许客户指定,对于 服务器的好处,地址 (URI) 资源的来源 获得了 Request-URI( “推荐人”,虽然标题 字段拼写错误。)

【讨论】:

    【解决方案4】:

    如果您使用浏览器请求网页,您的浏览器将随请求一起发送 HTTP Referer 标头。

    【讨论】:

      【解决方案5】:

      您的浏览器会在每个页面请求中传递引荐来源网址。

      JavaScript 也可以访问它似乎很不寻常,但确实如此。

      【讨论】:

        【解决方案6】:

        是的,浏览器在 HTTP 标头中发送上一页。这是在 HTTP/1.1 规范中定义的:

        http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36

        您的问题的答案是肯定的,因为浏览器会发送referer。

        【讨论】:

          【解决方案7】:

          “referrer 字段是浏览器程序向 Web 服务器发送的 HTTP 请求的可选部分。”

          http://en.wikipedia.org/wiki/HTTP_referrer

          【讨论】:

            【解决方案8】:

            当您单击链接时,浏览器会在请求中添加Referer 标头。它是part of HTTP。你可以阅读更多关于它的信息here

            【讨论】:

              猜你喜欢
              • 2011-08-04
              • 1970-01-01
              • 2016-07-12
              • 2011-04-05
              • 2015-03-09
              • 1970-01-01
              • 2011-07-08
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多