307 Beim Laden von analyse.js in Chrome umleiten

75

Ich erstelle eine Web-App und verwende Google Analytics (Analytics.js) für Analytics. Ich habe kürzlich festgestellt, dass die Analyse in Chrome nicht ordnungsgemäß funktioniert.

Ich lade Analytics mit dem Standard-Code-Snippet in ein separates Modul und füge es über requirejs ein. Ich habe überprüft, ob dieses Skript wie erwartet ausgeführt wird und das Analyse-Snippet ausführt.

Wenn ich den Netzwerkverkehr in Firefox überprüfe, kann ich feststellen, dass das Analyseskript wie erwartet von Google geladen wird (HTTP 200-Antwort):

Geben Sie hier die Bildbeschreibung ein

Wenn ich jedoch genau dieselbe Seite in Chrome ausführe, wird eine HTTP 307-Antwort angezeigt, die auf ungefähr: leer verweist, und Analytics wird nicht ausgeführt:

Geben Sie hier die Bildbeschreibung ein

Wenn ich die Analyse-URL jedoch direkt in die Chrome-Adressleiste einfüge, wird das Skript gefunden. Irgendwelche Ideen, was hier los ist oder wie man es behebt?

Benj
quelle

Antworten:

182

307 Internal Redirectwith Non-Authorative-Reason: Delegategibt an, dass die Anforderung von einer Chrome-Erweiterung über die APIs webRequest oder deklarative webRequest- Erweiterung abgefangen und geändert (umgeleitet) wurde .

Sie können wie folgt herausfinden, welche Nebenstelle die Umleitung ausgelöst hat:

  1. Besuch chrome://net-internals/#events
  2. Lösen Sie die Anfrage aus (in Ihrem Fall Google Analytics).
  3. Gehen Sie zurück zur chrome://net-internals/#eventsRegisterkarte und suchen Sie nach einer URL_REQUEST, die Ihrer Anfrage entspricht (Sie können das Suchfeld verwenden, um die Suche zu filtern).
  4. Klicken Sie auf den Eintrag, um das Protokoll auf der rechten Seite anzuzeigen. Sie sehen den Nebenstellennamen, die Nebenstellen-ID und andere Informationen zur Anfrage:
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 = "Nebenstelle [Name der Nebenstelle]"
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
                   -> Grund = "Delegieren"
t = 7915 [st = 5] URL_REQUEST_FAKE_RESPONSE_HEADERS_CREATED
                   -> HTTP / 1.1 307 Interne Umleitung
                       Ort: ungefähr: leer
                       Nicht autorisierender Grund: Delegierter

In diesem Protokollbeispiel hat eine Erweiterung mit dem Namen "[Name der Erweiterung]" und der Erweiterungs-ID "ebmlimjkpnhckbaejoagnjlgcdhdnjlb" die Anforderung umgeleitet. Nachdem Sie den Namen und / oder die ID der Erweiterung gefunden haben, können Sie chrome://extensionsdie Erweiterung, die die Anforderung geändert hat , besuchen und deaktivieren oder entfernen.

Rob W.
quelle
18
Genial. Ich hatte keine Ahnung, dass diese Analyse möglich war. Es stellte sich heraus, dass es sich um eine Erweiterung der Blockanalyse handelt (.... Drum Roll, bitte ...). Welches tat genau das, was es soll ...
Benj
3
Sie, Sir, haben meinen Tag gemacht! ;)
23tux
1
@RobW gist.github.com/anonymous/4baaf62bcaff2360eb6d - Das erwartete Verhalten besteht nicht aus einer 307-Umleitung, sondern aus einem 200-Code und einem direkten Download des Assets. Es ist eine http-Site, und alle Assets von cdn.shopify.comwerden in HTTPS konvertiert. Ich sehe keine DELEGATE_INFOund so. Danke mein Herr!
Yuji 'Tomita' Tomita
3
@ Yuji "Nicht autorisierender Grund: HSTS". Die Umleitung wird durch HTTP Strict Transport Security verursacht. Sie fordern eine http-Seite an, aber zuvor hat die Website angekündigt, dass alle Anfragen über https gestellt werden müssen. Daher schreibt Chrome die http-Anfrage (intern) in eine https-Anfrage um.
Rob W
1
@ Yuji'Tomita'Tomita Siehe chromium.org/hsts und en.wikipedia.org/wiki/HTTP_Strict_Transport_Security . Wenn Sie verhindern möchten, dass Chrome umgeleitet wird, entfernen Sie die Site aus der HSTS-Liste unter chrome: // net-internals / # hsts (die Umleitung erfolgt erneut, sobald Sie die Site mindestens einmal über https besuchen und die https-Site mit HSTS antwortet Überschriften).
Rob W
8

In meinem Fall war der Grund für die 307-Weiterleitung prosaischer. Aus Gewohnheit des Verwendens protokoll relativen URLs , habe ich das Protokoll aus der URL in dem Einbettungs Skript des Google Universal Analytics entfernt, ändert https://www.google-analytics.com/analytics.jsan //www.google-analytics.com/analytics.js.

Zum Beispiel ( versuchen Sie dies nicht zu Hause ):

(Funktion (i, s, o, g, r, a, m) {i ['GoogleAnalyticsObject'] = r; i [r] = i [r] || Funktion () {(i [r] .q = i [r] .q || []). push (Argumente)}, i [r] .l = 1 * neues Datum (); a = s.createElement (o), m = s.getElementsByTagName (o) [ 0]; a.async = 1; a.src = g; m.parentNode.insertBefore (a, m)}) (Fenster, Dokument, 'Skript', ' https: //www.google-analytics.com/analytics .js ',' ga ');

Dies ist nicht ratsam, da Google anscheinend die Skript- und Tracking-Anfragen nur über https bereitstellt. Das Entfernen des Protokolls führt also zu einer Umleitung sowohl beim ersten Einbetten des Skripts als auch bei jeder (!) Nachfolgenden Verfolgungsanforderung. Darüber hinaus wird diese Technik , wie von Paul Irish in einem Update seines kanonischen Beitrags über protokollbezogene URLs angegeben , nicht mehr empfohlen oder hat tatsächlich Vorteile:

Jetzt, da SSL für alle empfohlen wird und keine Leistungsbedenken hat, ist diese Technik jetzt ein Anti-Pattern. Wenn das von Ihnen benötigte Asset über SSL verfügbar ist, verwenden Sie immer das Asset https: //.

Boas
quelle
1

In meinem Fall habe ich UBlock Origin in meinem Browser aktiviert. Sobald die Verbindung getrennt oder der Standort autorisiert wurde, wurden die internen Umleitungen gestoppt

John D.
quelle