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


75

我正在构建一个Web应用程序,并使用Google Analytics(分析)(analytics.js)进行分析。我最近注意到,分析无法在Chrome中正常运行。

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

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

在此处输入图片说明

但是,当我在Chrome中运行完全相同的页面时,我收到指向about:blank的HTTP 307响应,并且分析未运行:

在此处输入图片说明

但是,如果我将分析URL直接粘贴到Chrome地址栏中,则会找到该脚本。任何想法在这里发生了什么,或如何解决?

Answers:


182

307 Internal Redirect带有Non-Authorative-Reason: Delegate表示该请求已被Chrome扩展程序通过webRequest声明性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]
                   -> proxy_info =“扩展名[扩展名]”
t = 7915 [st = 5] CHROME_EXTENSION_REDIRECTED_REQUEST
                   -> extension_id =“ ebmlimjkpnhckbaejoagnjlgcdhdndnb”
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)
                 ->方法=“ GET”
                 ->优先级=“低”
                 -> url =“ https://www.google-analytics.com/analytics.js”
t = 7915 [st = 5] URL_REQUEST_REDIRECT_JOB
                   ->原因=“委托”
t = 7915 [st = 5] URL_REQUEST_FAKE_RESPONSE_HEADERS_CREATED
                   -> HTTP / 1.1 307内部重定向
                       位置:关于:空白
                       非权威原因:代表

在此日志示例中,名为“ [扩展名]”和扩展ID为“ ebmlimjkpnhckbaejoagnjlgcdhdnjlb”的扩展名重定向了该请求。找到扩展名和/或ID后,您可以访问chrome://extensions并禁用或删除修改请求的扩展。


19
很棒。我不知道这种分析是可行的。原来是(....鼓卷,请...)块分析的扩展。到底是在做什么呢?
Benj 2015年

3
主席先生,我过得愉快!;)
23tux 2015年

1
@RobW gist.github.com/anonymous/4baaf62bcaff2360eb6d-预期的行为不是具有307重定向,而是具有200代码和资产的直接下载。这是一个http站点,所有资产cdn.shopify.com都将转换为HTTPS。我什么也没看到DELEGATE_INFO。谢谢你,先生!
Yuji'Tomita'Tomita

3
@Yuji“非权威原因:HSTS”。重定向是由HTTP严格传输安全性引起的。您正在请求一个http页面,但是此前该网站宣布所有请求都必须通过https进行,因此Chrome(内部)将http请求重写为https请求。
罗布W

1
@ Yuji'Tomita'Tomita参见chromium.org/hstsen.wikipedia.org/wiki/HTTP_Strict_Transport_Security。如果您要停止Chrome重定向,请从chrome:// net-internals /#hsts的HSTS列表中删除该网站(一旦您至少通过https访问该网站一次,并且https站点通过HSTS进行回复,重定向就会再次发生标头)。
罗布W

8

就我而言,307重定向的原因比较平淡。出于使用协议相对URL的习惯,我从Google Universal Analytics嵌入脚本的URL中删除了协议,更改https://www.google-analytics.com/analytics.js//www.google-analytics.com/analytics.js

例如(不要在家中尝试):

(function(i,s,o,g,r,a,m){i ['GoogleAnalyticsObject'] = r; i [r] = i [r] || function(){(i [r] .q = i [r] .q || []]。push(arguments)},i [r] .l = 1 * new Date(); a = s.createElement(o),m = s.getElementsByTagName(o)[ 0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a,m)})(窗口,文档,'脚本',' https: //www.google-analytics.com/analytics .js','ga');

这是不可取的,因为Google显然仅通过https提供脚本并跟踪请求。因此,删除协议会导致在首次嵌入脚本时以及在随后的any(!)跟踪请求中进行重定向。此外,正如Paul Irish在其有关协议相对URL的规范文章的更新中所述,不再鼓励这种技术,或者它确实具有优点:

现在,所有人都应该鼓励使用SSL,并且不必担心性能问题,现在,这种技术已成为一种反模式。如果您需要的资产在SSL上可用,则始终使用https://资产。


1

就我而言,我在浏览器上激活了UBlock Origin。断开连接或授权网站后,内部重定向将停止

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.