【问题标题】:Why isn't the the Referer header removed for Google HTTPS -> HTTP?为什么没有为 Google HTTPS -> HTTP 删除 Referer 标头?
【发布时间】:2014-03-22 05:48:57
【问题描述】:

如果引用页面是使用安全协议传输的,则客户端不应在(非安全)HTTP 请求中包含 Referer 标头字段。” https://www.rfc-editor.org/rfc/rfc2616#section-15.1.3

根据标准,https://google.com 不应将 Referer 标头发送到非安全站点,但确实如此。其他 HTTPS 站点是否将 Referer 标头发送到 HTTP 站点?

所有这些测试都是使用 Chrome v33.0.1750.117 完成的

要运行测试,我转到第一页,然后打开控制台并手动执行重定向,使用 location = "http://reddit.com"

Google 是否采取了一些特殊措施来保留 Referer 标头?是否有保留 Referer 标头的 HTTPS 站点列表?是否还有其他情况会删除 Referer 标头?

【问题讨论】:

    标签: javascript http-headers referrals referrer-policy


    【解决方案1】:

    我认为是因为谷歌使用了

    <meta name="referrer" content="always">
    

    因此,当一个人从 HTTPS 转到 HTTP 站点时,会保留引荐来源网址。否则,如果没有这个,引用者将被剥离。

    【讨论】:

    • 有趣,我认为这将是在后端设置的东西。我要测试一下,然后我会接受答案。
    • 这对于 Google 搜索不正确;下一个答案实际上是正确的,内容为“origin”。
    【解决方案2】:

    当您使用 Google Chrome 进行 Google 搜索时,搜索结果中会出现以下标记:

    <meta content="origin" id="mref" name="referrer">
    

    origin 值意味着当从https 转到http 时,不应完全省略Referer,而是应提供源域名,但不提供站点内的确切页面(例如,搜索字符串将保持私密)。


    另一方面,像 lobsters 这样的链接聚合器具有以下内容,这确保了整个 URL 将在 Referer 中提供 always(由 Chrome 和 Safari 等浏览器提供),因为无论如何链接故事都是公开的:

    <meta name="referrer" content="always" />
    

    截至 2014 年年中,这个 meta[@name="referrer"] 只是 HTML5 的提议功能,例如,它似乎没有在 Gecko 中实现 - 只有 Chrome 和 Safari 声称支持它。

    http://smerity.com/articles/2013/where_did_all_the_http_referrers_go.html

    https://bugzilla.mozilla.org/show_bug.cgi?id=704320

    http://wiki.whatwg.org/wiki/Meta_referrer

    【讨论】:

      【解决方案3】:

      cnst 在上面正确回答了这个问题;它的内容=“原点”。这会强制浏览器使用 HTTPS->HTTPS 和 HTTPS->HTTP 来获取请求标头:

      http-referer=https://www.google.com  
      

      此功能允许网站在不将 URL 参数泄露给第三方的情况下获得流量。太棒了,因为它比人们过去在这里使用的要少得多。

      目前有三个与之竞争的规范。我不知道哪个是权威的,并怀疑它是混合的。它们在大多数方面都相似。

      据我所知,这里有可用的支持;如果我错了或遗漏了什么,希望人们告诉我。

      现在:

      • Chrome 17+ 在桌面上支持此功能
      • 适用于移动设备的 Chrome 25+
      • iPad 和 iPhone 上的 Safari 6

      未知版本:

      • Desktop Safari 7 支持此功能;早期版本可能支持,但我没有浏览器来确认。

      马上就要上线了:

      【讨论】:

      • FWIW;原因很简单。 Google 在 URL 中有您的搜索查询,而您的查询是您的私人数据,默认情况下不应与您访问的下一个站点共享。第二个优先事项是在referer 字段中维护google.com,以便Google 仍然可以获得网站流量的功劳。
      猜你喜欢
      • 2014-04-02
      • 2014-08-12
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多