我正在构建一个网络应用并使用Google Analytics(analytics.js)进行分析。我最近注意到分析在Chrome中无法正常运行。
我正在使用标准代码段在单独的模块中加载分析,并通过requirejs包含。我已经验证此脚本按预期运行并执行分析代码段。
当我检查Firefox中的网络流量时,我可以看到分析脚本是按预期从Google加载的(HTTP 200响应):
但是,当我在Chrome中运行完全相同的页面时,我收到一条HTTP 307响应,指向about:blank,并且分析不会运行:
但是,如果我将分析网址直接粘贴到Chrome地址栏中,则会找到该脚本。任何想法在这里发生了什么,或如何解决它?
答案 0 :(得分:173)
307 Internal Redirect
的 Non-Authorative-Reason: Delegate
表示Chrome扩展程序通过webRequest或declarative webRequest扩展程序API拦截并修改(重定向)了该请求。
您可以找到触发重定向的扩展程序,如下所示:
chrome://net-internals/#events
chrome://net-internals/#events
标签,查找与您的请求相匹配的URL_REQUEST(您可以使用搜索框过滤搜索)。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 [Name of 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
在此日志示例中,名称为“[扩展名称]”和扩展名“ebmlimjkpnhckbaejoagnjlgcdhdnjlb”的扩展名重定向了请求。找到扩展名和/或ID后,您可以访问chrome://extensions
并禁用或删除修改请求的扩展程序。
答案 1 :(得分:8)
就我而言,307重定向的原因更为平淡无奇。出于使用protocol-relative URLs的习惯,我已从Google通用分析的嵌入脚本中的网址中删除了协议,将https://www.google-analytics.com/analytics.js
更改为//www.google-analytics.com/analytics.js
。
例如(不要在家中尝试):
(功能(I,S,O,G,R,A,M){I [ 'GoogleAnalyticsObject'] = R; I [R] = I [R] ||函数(){ (i [r] .q = i [r] .q || [])。push(arguments)},i [r] .l = 1 * new Date(); a = s.createElement(o), 米= s.getElementsByTagName(O)[0]; a.async = 1; a.src =克; m.parentNode.insertBefore(A,M) })(窗口,文件, '脚本',“的 <击> HTTPS:击> 强> // www.google-analytics.com/analytics.js','ga');
这是不可取的,因为Google显然只通过https提供脚本和跟踪请求。因此,删除协议会在首次嵌入脚本时以及任何(!)后续跟踪请求中导致重定向。此外,正如Paul Irish在他canonical post about protocol-relative URLs的更新中所述,这种技术不再受到鼓励,或者确实具有优点:
既然所有人都鼓励使用SSL,并且没有性能问题,那么这种技术现在已成为一种反模式。如果您需要的资产在SSL上可用,则始终使用https:// asset。
答案 2 :(得分:0)
就我而言,我在浏览器上激活了UBlock Origin。一旦断开连接或获得网站授权,内部重定向就会停止