在Chrome中加载analytics.js时发生307重定向

78

我正在开发一个Web应用程序,使用Google Analytics (analytics.js) 进行分析。最近注意到在Chrome浏览器中分析功能无法正常工作。

我使用标准代码段在单独的模块中加载并通过requirejs进行包含。我已验证此脚本按预期运行并执行分析段。

当我在Firefox中检查网络流量时,可以看到分析脚本已按预期从Google加载(200 HTTP响应):

输入图像描述

然而,如果我在Chrome中运行完全相同的页面,我会收到指向about: blank的HTTP 307响应,并且分析不会运行:

输入图像描述

但是,如果我直接将分析URL粘贴到Chrome地址栏中,则会找到该脚本。有什么想法或如何解决这个问题吗?

3个回答

190
使用Non-Authorative-Reason: Delegate307 Internal Redirect表示请求被Chrome扩展通过webRequestdeclarative webRequest扩展API拦截并修改(重定向)。
您可以按照以下步骤查找触发重定向的扩展程序:
  1. 访问chrome://net-internals/#events
  2. 触发请求(在您的情况下为Google Analytics)。
  3. 返回到chrome://net-internals/#events标签页,并查找与您的请求匹配的URL_REQUEST(您可以使用搜索框来过滤搜索)。
  4. 单击条目以显示右侧的日志。您将看到有关请求的扩展名、扩展ID和其他信息:
t=7910 [st=0] +REQUEST_ALIVE  [dt=6]
t=7910 [st=0]   +URL_REQUEST_DELEGATE  [dt=5]
t=7910 [st=0]      DELEGATE_INFO  [dt=5]
                   --> delegate_info = "extension [扩展名]"
t=7915 [st=5]      CHROME_EXTENSION_REDIRECTED_REQUEST
                   --> extension_id = "ebmlimjkpnhckbaejoagnjlgcdhdnjlb"
t=7915 [st=5]   -URL_REQUEST_DELEGATE
t=7915 [st=5]   +URL_REQUEST_START_JOB  [dt=1]
                 --> load_flags = 339804160 (BYPASS_DATA_REDUCTION_PROXY | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VERIFY_EV_CERT)
                 --> method = "GET"
                 --> priority = "LOW"
                 --> url = "https://www.google-analytics.com/analytics.js"
t=7915 [st=5]      URL_REQUEST_REDIRECT_JOB
                   --> reason = "Delegate"
t=7915 [st=5]      URL_REQUEST_FAKE_RESPONSE_HEADERS_CREATED
                   --> HTTP/1.1 307 Internal Redirect
                       Location: about:blank
                       Non-Authoritative-Reason: Delegate
在此日志示例中,名为“[扩展名]”且扩展ID为“ebmlimjkpnhckbaejoagnjlgcdhdnjlb”的扩展程序重定向了请求。找到扩展名和/或ID后,您可以访问chrome://extensions并禁用或删除修改请求的扩展程序。

21
太棒了,我之前并不知道这种分析是可能的。结果证明这是对"区块分析"的延伸。而该功能正在如期运行...(请敲鼓声) - Benj
3
您,先生,让我今天过得非常愉快! ;) - 23tux
3
@Yuji "非权威原因:HSTS"。重定向是由HTTP严格传输安全性引起的。您正在请求一个HTTP页面,但之前该网站公布所有请求必须通过HTTPS进行,所以Chrome(内部)会将HTTP请求重写为HTTPS请求。 - Rob W
1
@Yuji'Tomita'Tomita 请参阅https://www.chromium.org/hsts和https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security。如果您想停止Chrome的重定向,请在chrome://net-internals/#hsts中从HSTS列表中删除该站点(一旦您通过https至少访问一次该站点,并且https站点回复HSTS头,重定向将再次发生)。 - Rob W
1
我遇到了这个问题,这篇文章让我意识到它是Chrome中的Disconnect插件!唉,真蠢!当你成为自己最大的敌人时,你得爱自己! - Arian Kulp
显示剩余8条评论

8
在我的情况下,307重定向的原因更加平凡。由于习惯使用协议相对URL(protocol-relative URLs),我已经从Google Universal Analytics的嵌入脚本中删除了URL中的协议,将https://www.google-analytics.com/analytics.js更改为//www.google-analytics.com/analytics.js
例如(请勿在家中尝试):
这样做是不明智的,因为谷歌显然只通过https提供脚本和跟踪请求。因此,删除协议会导致在首次嵌入脚本时以及在任何后续跟踪请求中都发生重定向。此外,正如保罗·爱尔兰在他关于协议相对URL的规范帖子更新中所述,这种技术现在不再被推荐或者说没有任何价值:

现在,由于SSL已经被推荐给所有人,并且没有性能问题,因此这种技术现在是一种反模式。如果需要的资源在SSL上可用,则始终使用https://资源。


4

在我的情况下,我已经在浏览器上启用了UBlock Origin。一旦断开连接或者授权了网站,内部重定向就会停止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接