307 Перенаправление при загрузке analytics.js в Chrome
Я создаю веб-приложение и использую Google Analytics (analytics.js) для аналитики. Недавно я заметил, что аналитика работает некорректно в Chrome.
Я загружаю аналитику с помощью стандартного фрагмента кода в отдельный модуль и включаю через requirejs. Я проверил, что этот script работает как ожидалось и выполняет фрагмент аналитики.
Когда я просматриваю сетевой трафик в Firefox, я вижу, что аналитика script загружается из Google как ожидалось (ответ HTTP 200):
![enter image description here]()
Однако, когда я запускаю ту же самую страницу в Chrome, я получаю ответ HTTP 307, указывающий примерно: blank и аналитика не запускается:
![enter image description here]()
Однако, если я вставляю URL-адрес аналитики непосредственно в адресную строку Chrome, будет найден script. Любые идеи, что здесь происходит, или как это исправить?
Ответы
Ответ 1
307 Internal Redirect
с Non-Authorative-Reason: Delegate
указывает, что запрос был перехвачен и изменен (перенаправлен) с помощью расширения Chrome через webRequest или декларативные webRequest API расширений.
Вы можете узнать, какое расширение вызвало перенаправление следующим образом:
- Посетите
chrome://net-internals/#events
- Запустите запрос (Google Analytics, в вашем случае).
- Вернитесь на вкладку
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" перенаправил запрос. После нахождения имени расширения и/или идентификатора вы можете посетить chrome://extensions
и отключить или удалить расширение, которое изменило запрос.
Ответ 2
В моем случае причина редиректа 307 была более прозаичной. Из-за привычки использовать URL-адреса, относящиеся к протоколу, я удалил протокол из URL-адреса в скрипте встраивания Google Universal Analytics, изменив https://www.google-analytics.com/analytics.js
на //www.google-analytics.com/analytics.js
.
Например (не пытайтесь сделать это дома):
(function (i, s, o, g, r, a, m) {i ['GoogleAnalyticsObject'] = r; я [r] = я [r] || function() {(i [r].q = я [r].q || []). push (arguments)}, я [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', 'га');
Это нежелательно, поскольку Google, по-видимому, обслуживает сценарии и отслеживает запросы только через https. Таким образом, удаление протокола вызывает перенаправление как при первом встраивании скрипта, так и при любом (!) Последующем запросе отслеживания. Кроме того, как заявил Пол Ирриш в обновлении своего канонического поста об URL-адресах, связанных с протоколом, этот метод больше не поощряется или действительно имеет свои достоинства:
Теперь, когда SSL поощряется для всех и не имеет проблем с производительностью, этот метод теперь является анти-паттерном. Если нужный вам ресурс доступен по SSL, всегда используйте https://asset.
Ответ 3
В моем случае в моем браузере активирован UBlock Origin. После отключения или авторизации на сайте внутренние перенаправления прекратились