307 редирект при загрузке аналитики.js в Хроме
Я создаю веб-приложение и использую Google Analytics (analytics.js) для аналитики. Недавно я заметил, что аналитика не работает должным образом в Chrome.
я загружаю аналитику, используя стандартный фрагмент кода в отдельном модуле и включенный через requirejs. Я проверил, что этот скрипт работает должным образом и выполняет фрагмент аналитики.
когда я проверяю сетевой трафик в Firefox, я вижу, что скрипт аналитики загружается из Google, как и ожидалось (Ответ HTTP 200):
однако, когда я запускаю ту же страницу в Chrome, я получаю ответ HTTP 307, указывающий на about:blank, а analytics не запускается:
однако, если я вставляю url analytics непосредственно в адресную строку Chrome, скрипт найден. Любые идеи, что здесь происходит, или как это исправить?
2 ответа:
307 Internal Redirect
СNon-Authorative-Reason: Delegate
указывает, что запрос был перехвачен и изменен (перенаправлен) расширением Chrome через webRequest или декларативный webRequest расширение API-интерфейсы.вы можете узнать, какое расширение вызвало перенаправление следующим образом:
- посетить
chrome://net-internals/#events
- вызовите запрос (google analytics, в вашем случае).
- вернуться
chrome://net-internals/#events
tab и искать 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
и отключить или удалить расширение, которое изменило запрос.
в моем случае причина перенаправления 307 была более прозаичной. По привычке использовать протокол-относительные url, Я удалил протокол из URL в сценарии встраивания Google Universal Analytics, изменив
https://www.google-analytics.com/analytics.js
до//www.google-analytics.com/analytics.js
.например (Не пытайтесь сделать это дома):
(функция(я,ю,о,г,р,а,м){я['GoogleAnalyticsObject']=R;с Я[р]=я[Р] функция||(){ (i[r].q=i[r].вопрос.)][||push (аргументы)},i[r].l=1 * новая дата (); a=s. createElement (o), м=ы.метод getelementsbytagname(о)[0];а.ключевые слова async=1;а.СРЦ=г;м. parentNode.insertBefore(a, m) })(window,document,'script','
https://www.google-analytics.com/analytics.js','ga');это нецелесообразно, поскольку Google, по-видимому, обслуживает скрипт и отслеживает запросы только по https. Поэтому удаление протокола вызывает перенаправление как при первом включение скрипт как и в любом(!) последующий запрос отслеживания. Кроме того, как заявил Пол Айриш в обновлении к своему канонический пост о протоколе-относительные URL-адреса эта техника не рекомендуется, или действительно имеет достоинство:
теперь, когда SSL поощряется для всех и не имеет проблем с производительностью, этот метод теперь является анти-шаблоном. Если необходимый ресурс доступен по протоколу SSL, всегда используйте https: / / asset.