307 Переспрямування під час завантаження analytics.js у Chrome


75

Я створюю веб-додаток і використовую Google Analytics (analytics.js) для аналізу. Нещодавно я помітив, що аналітика не працює належним чином у Chrome.

Я завантажую аналітику, використовуючи стандартний фрагмент коду в окремому модулі та включений через requirejs. Я перевірив, що цей сценарій працює належним чином, і виконує фрагмент аналітики.

Коли я перевіряю мережевий трафік у Firefox, я бачу, що сценарій аналітики завантажується з Google, як очікувалося (відповідь HTTP 200):

введіть тут опис зображення

Однак, коли я запускаю ту саму сторінку в Chrome, я отримую відповідь HTTP 307, що вказує на about: blank, а аналітика не запускається:

введіть тут опис зображення

Однак, якщо я встав URL-адресу аналітики безпосередньо в адресний рядок Chrome, скрипт знайдено. Будь-які ідеї, що тут відбувається, або як це виправити?

Відповіді:


182

307 Internal Redirectз Non-Authorative-Reason: Delegateвказує на те, що запит було перехоплено та змінено (перенаправлено) розширенням Chrome через API веб- запиту або декларативного розширення webRequest .

Ви можете дізнатись, яке розширення спричинило переспрямування наступним чином:

  1. Відвідайте chrome://net-internals/#events
  2. Запустіть запит (у вашому випадку Google Analytics).
  3. Поверніться на chrome://net-internals/#eventsвкладку та знайдіть URL_REQUEST, який відповідає вашому запиту (ви можете використовувати поле пошуку для фільтрування пошуку).
  4. Клацніть на запис, щоб відобразити журнал праворуч. Ви побачите назву розширення, ідентифікатор розширення та іншу інформацію про запит:
t = 7910 [st = 0] + ЗАПИТАТИ_АЛІВ [dt = 6]
t = 7910 [st = 0] + URL_REQUEST_DELEGATE [dt = 5]
t = 7910 [st = 0] DELEGATE_INFO [dt = 5]
                   -> delegate_info = "розширення [Назва розширення]"
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"
                 -> пріоритет = "НИЗЬКИЙ"
                 -> 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 Внутрішня перенаправлення
                       Місцезнаходження: приблизно: порожнє
                       Неавторитетна причина: делегат

У цьому прикладі журналу розширення з іменем "[Назва розширення]" та ідентифікатором розширення "ebmlimjkpnhckbaejoagnjlgcdhdnjlb" перенаправило запит. Після пошуку імені та / або ідентифікатора розширення ви можете відвідати chrome://extensionsта вимкнути або видалити розширення, яке змінило запит.


19
Блискучий. Я не уявляв, що такий аналіз можливий. Виявилося, що це розширення для (.... барабанної стрічки, будь ласка ...) блокування аналітики. Який робив саме те, що повинен ...
Бендж

3
Ви, сер, зробили мені день! ;)
23tux

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/hsts і en.wikipedia.org/wiki/HTTP_Strict_Transport_Security . Якщо ви хочете зупинити перенаправлення Chrome, видаліть сайт зі списку HSTS за адресою chrome: // net-internals / # hsts (перенаправлення відбудеться знову, коли ви хоча б раз відвідаєте сайт через https, а сайт https відповість HSTS заголовки).
Роб W

8

У моєму випадку причина переспрямування 307 була більш прозаїчною. За звичкою використовувати URL-адреси , що відносяться до протоколів, я видалив протокол із URL-адреси в сценарії вбудовування Google Universal Analytics, змінивши 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] || function () {(i [r] .q = i [r] .q || []). push (аргументи)}, i [r] .l = 1 * нова дата (); 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. Отже, видалення протоколу спричиняє переспрямування як при першому вбудовуванні сценарію, так і в будь-якому (!) Наступному запиті відстеження. Крім того, як зазначив Пол Ірланд в оновленні свого канонічного допису про URL-адреси , що стосуються протоколів , цей прийом більше не заохочується або насправді має переваги:

Зараз, коли SSL заохочується для всіх і не турбується щодо продуктивності, цей метод тепер є анти-шаблоном. Якщо потрібний вам ресурс доступний на SSL, завжди використовуйте https: // актив.


1

У моєму випадку в моєму браузері активовано UBlock Origin. Після відключення або дозволу сайту внутрішні перенаправлення припиняються

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.