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

时间:2015-01-14 14:40:11

标签: javascript google-chrome google-analytics

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

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

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

enter image description here

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

enter image description here

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

3 个答案:

答案 0 :(得分:173)

带有307 Internal Redirect

Non-Authorative-Reason: Delegate表示Chrome扩展程序通过webRequestdeclarative webRequest扩展程序API拦截并修改(重定向)了该请求。

您可以找到触发重定向的扩展程序,如下所示:

  1. 访问chrome://net-internals/#events
  2. 触发请求(在您的情况下为谷歌分析)。
  3. 返回chrome://net-internals/#events标签,查找与您的请求相匹配的URL_REQUEST(您可以使用搜索框过滤搜索)。
  4. 点击该条目以显示右侧的日志。您将看到扩展名,扩展ID和有关请求的其他信息:
  5. 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。一旦断开连接或获得网站授权,内部重定向就会停止