«ВНИМАНИЕ: отображаются временные заголовки» в отладчике Chrome

400

Я заметил странное сообщение с предупреждением при просмотре загруженных ресурсов с помощью инспектора Google Chrome ( F12):

Осторожно показаны временные заголовки

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

Я нашел что-то уместное, Сетевая панель: добавьте осторожность относительно предварительных заголовков запросов , но я не мог полностью понять это. Связанные вопросы можно найти в запросах на блокировку Chrome, а также не удается загрузить XMLHttpRequest. В выгруженных ресурсах следует проявлять осторожность: отображаются предварительные заголовки .

Как и в первом вопросе , мой ресурс был заблокирован, но позже автоматически загрузил этот же ресурс. В отличие от второго вопроса , я не хочу ничего исправлять; Я хочу знать, что означает это сообщение и почему я его получил.

Сальвадор Дали
источник
3
Эта проблема также может возникнуть, если запрос не был отправлен из-за переключения домена, например, отправка данных через ajax с www.domain.tld на domain.tld или наоборот.
Андре Баумайер
@wvega В этом вопросе SO опубликована похожая проблема, но, похоже, нет никакого возможного объяснения этой проблемы « Отправленные предварительные заголовки» . Любое конкретное решение для этого? действительно раздражает! Я разместил этот вопрос некоторое время назад.
веб-блог
1
@webblover Есть хорошее объяснение от wvega. И я на самом деле не искал решения. Мне было любопытно о причине.
Сальвадор Дали
Это помогло мне, когда я выключил это:chrome://flags/#site-isolation-trial-opt-out
Илья Зеленько
Прочитайте мой ответ, это не так сложно, как кажется: stackoverflow.com/questions/21177387/…
csandreas1

Ответы:

353

Ресурс может быть заблокирован расширением (в моем случае AdBlock).

Сообщение есть, потому что запрос на получение этого ресурса никогда не был сделан, поэтому отображаемые заголовки не являются реальными. Как объяснялось в проблеме, на которую вы ссылались, реальные заголовки обновляются, когда сервер отвечает, но ответа не было, если запрос был заблокирован.


Я узнал о расширении, которое блокировало мой ресурс, с помощью инструмента net-internals в Chrome:

Для последних версий хрома

  • Введите chrome://net-export/в адресной строке и нажмите Enter.
  • Начать запись. И сохраните файл записи в локальный.
  • Откройте страницу, которая показывает проблемы.
  • Вернуться к net-internals
  • Вы можете просмотреть записанный файл журнала здесь https://netlog-viewer.appspot.com/#import
  • нажмите на события (###) и используйте текстовое поле, чтобы найти событие, связанное с вашим ресурсом (используйте части URL).
  • Наконец, нажмите на событие и посмотрите, говорит ли вам что-то показанная информация.

Для старых версий хрома

  • Введите chrome://net-internalsв адресной строке и нажмите Enter.
  • Откройте страницу, которая показывает проблемы.
  • Вернитесь к net-internals, нажмите на события (###) и используйте текстовое поле, чтобы найти событие, связанное с вашим ресурсом (используйте части URL).
  • Наконец, нажмите на событие и посмотрите, говорит ли вам что-то показанная информация.
Уиллингтон Вега
источник
7
Ответ Шазз лучше. Это сообщение появляется в отладчике всякий раз, когда ресурс извлекается из кэша браузера, не спрашивая сервер, изменилось ли содержимое.
Maor
4
Я думаю, что оба ответа верны, они рассказывают две стороны одной истории. Сообщение отображается, когда запрос заблокирован или ресурсы загружены из кэша, а также после того, как каждый запрос инициирован, и пока браузер ожидает ответа от сервера. Как только приходит ответ, сообщение исчезает и отображаются реальные заголовки.
Уиллингтон Вега
2
Если первично проанализированная страница перенаправляется, например, example.com/a -> 301-> example.com/b, и целевая страница отвечает 200, а затем вы нажимаете в инспекторе целевую страницу / b, чтобы увидеть данные заголовка , вы получите их с пометкой «Предварительные заголовки показаны». Это правильно, потому что вы не анализировали целевую страницу напрямую. Если вы это сделаете, вы получите данные заголовка без метки.
Евгений
1
Я смог определить, что это была моя проблема, потому что, когда я сделал выше. Мой сайт https вызывал файл https css, который выполнял перенаправление 302 на страницу http. Безопасность не позволяла загружать файл и показывала только предварительные заголовки.
Стеропс
1
Существует очень хорошее объяснение нескольких причин, по которым это может произойти: stackoverflow.com/questions/12009423/…
boldnik
112

Я считаю, что это происходит, когда фактический запрос не отправлен. Обычно это происходит при загрузке кэшированного ресурса.

Шазс
источник
61
Нет, 304 без изменений приходит с сервера в ответ на условный запрос. Если вы загружаете кэшированный ресурс и ваш браузер не должен связываться с сервером, вы не получите 304 без изменений или какой-либо HTTP-статус вообще, потому что HTTP-запрос не будет сделан.
Томасруттер
7
Это работает для меня, когда я увидел «Предварительные заголовки отображаются» на панели отладчика, код состояния запроса был «200 OK (из кэша)»
Ричи
3
Я видел это с ответом сервисного работника, так что я думаю, что по крайней мере в некоторых случаях вы правы насчет ответа кэша :)
jacoballenwood
4
Я отключаю кеш в инструментах разработки и все равно получаю это сообщение. Статус для всех файлов - 200, нет "(из кэша)". Так что иногда это может быть связано с кешем, но, конечно, не всегда.
Ральф
Это загрузка данных из кеша в моем случае.
Авив Ло
40

Для chrome v72 + это решило только для меня это:

перейти chrome://flags/и отключить эти 3 флага

  • Отключить изоляцию сайта
  • Включить сетевой сервис
  • Запускает сетевой сервис в процессе

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

или вы можете сделать это из командной строки:

chrome --disable-site-isolation-trials --disable-features=NetworkService,NetworkServiceInProcess

почему это случилось?

Похоже, что Google реорганизует свой движок Chromium в модульную структуру, где различные сервисы будут разделены на отдельные модули и процессы. Они называют этот процесс обслуживанием. Сетевой сервис - это первый шаг, сервис Ui, сервис идентификации и сервис устройств. Google предоставляет официальную информацию на сайте проекта Chromium .

опасно ли это изменить?

Примером является сетевое взаимодействие: когда у нас есть сетевой сервис, мы можем выбрать его запуск вне процесса для лучшей стабильности / безопасности или внутрипроцессного, если мы ограничены в ресурсах . источник

Бадр Элмерс
источник
4
Мне удалось заставить это работать только с «Включить сетевой сервис» и «Запускает сетевой сервис в процессе».
малыш
Я просто отключил изоляцию сайта, и это сработало для меня.
Ашрит
3
Это работало в обычном Chrome (v74), однако в последней версии Chrome Canary (v76) теперь отсутствует флаг "# network-service" ... Невозможно заставить это работать в Canary без него.
богатый
Я видел эту проблему на обоих localhost:8080и google.com(!?). Исправлено отключение изоляции сайта google.com, но не localhost. Отключение только двух других опций исправило это во всех случаях.
BlueRaja - Дэнни Пфлюгофт
Мне только нужно было отключить это: chrome: // flags / # site-изоляция-trial-opt-out
Илья Зеленько
25

Я столкнулся с этой проблемой, и мне удалось определить конкретную причину, которая не упоминалась выше ни в ответах, ни в вопросе.

Я использую полный стек js, угловой интерфейс и серверную часть узла по протоколу SSL, а API находится в другом домене, работающем через порт 8081, поэтому я выполняю запросы CORS и withCredentials, поскольку я удаляю файл cookie сеанса из API

В частности, мой сценарий был следующим: запрос POST с использованием Credentials к порту 8081 вызвал сообщение «ВНИМАНИЕ: предварительные заголовки показаны» в инспекторе, а также, конечно, заблокировал запрос все вместе.

Мое решение состояло в том, чтобы настроить apache, чтобы прокси передавал запрос от обычного порта SSL 443 на порт SSL узла 8081 (узел должен быть на более высоком порту, так как он не может быть запущен от имени root в prod). Поэтому я предполагаю, что Chrome не нравится запросы SSL к нетрадиционным портам SSL, но, возможно, их сообщение об ошибке может быть более конкретным.

Мистер П
источник
2
Это политика браузера того же происхождения - ваша веб-страница и ресурсы, которые вы читаете, должны быть на одном и том же порту. developer.mozilla.org/en-US/docs/Web/Security/...
r3m0t
1
Огромное спасибо за помощь. Я использую сервер Webpacks Dev, и я смог просто добавить правило перезаписи. '/graphql': { target: 'http://10.10.1.38:4000', changeOrigin: true }
Джеймс Харрингтон,
Точно так же я решил эту проблему, добавив "proxy": "http://192.168.98.110:1234"мой package.jsonв проект create-реагировать на приложение. В отличие от ответа, я нигде не использую HTTPS в dev, но это было необходимо, потому что мое приложение и API находятся на разных IP-адресах.
chrishiestand
16

Это также может произойти (только для запросов между источниками) из-за новой функции, называемой изоляцией сайта.

Эта страница подробно описывает проблему и обходные пути . Для этого нужно перейти chrome://flags/#site-isolation-trial-opt-outв Chrome и изменить этот параметр на «Отказ» и перезагрузить Chrome.

Это известная проблема . Однако на этой странице написано, что она исправлена ​​в Chrome 68, но я использую Chrome 68 и у меня все еще есть проблема.

onlynone
источник
1
Если ваши запросы не заблокированы (200 OK), это происходит только с запросами CORS, а отсутствующий заголовок - Cookie , вы хотите проверить этот ответ. Спасибо, @onlynone
Семако
@ semako, не могли бы вы объяснить это немного подробнее? Я сталкиваюсь с подобной проблемой, но я не до конца понимаю, почему. Для получения дополнительной информации, пожалуйста, смотрите мой последний пост. благодарю вас.
adn bps
12

Ресурсы HTTP / 2 Pressed будут Provisional headers are shownотображаться в инспекторе по той же теории, что и @wvega, опубликованная в его ответе выше .

Например: поскольку сервер отправил ресурс (ы) клиенту ( до того, как клиент запросил их ), браузер кэшировал ресурсы и, следовательно, клиент никогда не делает / нуждается в запросах; Потому, что...

... реальные заголовки обновляются, когда сервер отвечает, но ответа не было, если запрос был заблокирован.

Сообщество
источник
12

Моя ситуация связана с происхождением .
Ситуация: браузер отправляет OPTIONSзапрос перед отправкой реального запроса, например GETили POST. Бэкэнд-разработчик забывает обрабатывать OPTIONSзапрос, пропуская его через служебный код, что делает процесс обработки слишком долгим. Дольше, чем настройка времени ожидания, которую я написал в axiosинициализации, которая составляет 5000 миллисекунд. Поэтому реальный запрос не мог быть отправлен, и тогда я столкнулся с provisional headers are shownпроблемой.
Решение: Когда дело доходит до OPTIONSзапроса, бэкэнд API просто возвращает результат, это делает запрос быстрее и реальный запрос может быть отправлен до истечения времени ожидания.

Alexee
источник
6

Я сомневаюсь, что мой ответ вовремя поможет вам, но другие могут найти его полезным. У меня возникла похожая проблема с скриптом jQuery Ajax Post, который я создал.

Оказалось, что у меня есть опечатка в атрибуте href тега A, который я использовал для запуска записи. Я набрал href = " javacsript:; " (изменяя 's' и 'c') .. это заставило скрипт попытаться обновить страницу, пока пост пытался запустить. исправил опечатку, и она отлично работала для меня.

дикарь
источник
Столкнулся с такой же проблемой, там не было опечаток, но у меня был сценарий перезагрузки страницы до того, как POST был запущен / завершен.
Raindal
4

Это сообщение может появиться, когда сайт защищен с помощью HSTS . Затем, когда кто-то ссылается на HTTP-версию URL-адреса, браузер, следуя инструкциям HSTS, не выдает HTTP-запрос, а внутренне перенаправляет на ресурс HTTPS безопасно. Это сделано для того, чтобы избежать атак понижения HTTPS, таких как sslstrip .

dionyziz
источник
Я отключил HSTS, и оригинальные заголовки появились снова. Спасибо!
kenberkeley
3

Это может произойти из-за того, что вы отправили запрос Ajax, в то же время вы перешли на другую страницу, используя location.href или что-то в этом роде. Так что предыдущий запрос не удался.

Frankjs
источник
2

Это предупреждающее сообщение также появляется, если ответ является недействительным и поэтому отбрасывается браузером.

В моем случае запрос был правильно отправлен на сервер, затем серверный код выдал ошибку, и моя пользовательская обработка ошибок вернула сообщение об ошибке в поле сообщения статуса HTTP. Но эта ошибка не была получена на стороне клиента из-за недопустимых символов в сообщении об ошибке (описанном здесь http://aspnetwebstack.codeplex.com/workitem/1386 ), что привело к повреждению заголовков ответов.

Флориан Хайдер
источник
2

Я столкнулся с этой проблемой с вызовом AJAX, который никогда не завершится. Я последовал совету и совету wvega по отладке, chrome://net-internalsчтобы в конечном итоге определить, что другой clickобработчик событий на странице, прослушивающий родительский узел, заставлял браузер переходить по тому же URL-адресу (так что это было не так легко заметить).

Решение было добавить event.stopPropagation()в clickобработчик на форме кнопки отправки , чтобы щелчок от бурлит в DOM и отмене запроса AJAX Идет (инициированный с помощью submitобработчика на form).

скудный
источник
2

У меня это возникло совсем недавно (на самом деле сегодня), когда мне приходили вызовы AJAX на сервер, и Chrome запускает «Внимание: отображаются предварительные заголовки». В сценариях PHP на стороне сервера есть запросы MySQL, которые могут быть почти мгновенными или занимать несколько секунд в зависимости от заданного сценария. Мой ответ сервера не отправляется обратно в браузер, пока запросы не будут завершены. Я обнаружил, что получаю эту ошибку только тогда, когда выполняются трудоемкие запросы (всего до нескольких секунд), и предотвращают отправку ответа.

Мой сценарий включает в себя очень редкую возможность изменения таблицы путем добавления / удаления сотен столбцов для вывода модели погоды ... отсюда и задержка ответа при повторении цикла запросов ALTER TABLE.

Gwi7d31
источник
PHP Workers, может быть, что-то для вас
Bartłomiej Zalewski
2

Обычная причина, по которой это происходит, - это если вы отслеживаете событие и не препятствует действию по умолчанию. Например, если у вас есть событие щелчка, вам нужно включить:

e.preventDefault();

или

return false;

Если вы этого не сделаете, вы увидите предупреждение о предварительных заголовках, а также состояние «отменено» на вкладке «Сеть» веб-консоли.

bigtex777
источник
2

В моем случае это был просто неверный путь к ресурсу (svg / img)

typocoder
источник
Да - для меня отсутствуют разрешения при использовании файла ввода для запроса.
phil294
2

Эта проблема возникла у меня, когда я отправлял неверный HTTP-заголовок авторизации. Я забыл кодировать в base64.

Роберт Кристофер
источник
1
В моем случае заголовок авторизации был слишком длинным
Agorilla
1

Я сталкивался с этим, и он ушел, когда я переключился с https на http. Сертификаты SSL, которые мы используем в dev, не проверяются третьей стороной. Они просто генерируются локально разработчиками.

Те же звонки прекрасно работают в Chrome Canary и Firefox. Эти браузеры не так строги в отношении SSL-сертификата, как Chrome. В Chrome вызовы не будут выполнены с сообщением «ВНИМАНИЕ: Предварительные заголовки ...».

Я думаю / надеюсь, что когда мы используем законный SSL-сертификат на стадии и в prod, мы больше не увидим такого поведения в Chrome.

CodeWarrior
источник
я попытался свернуться, и получил 60. из этого ответа выясняю недостающую цепь при установке SSL. добавить цепочку и проблема исчезла. Спасибо чувак! Пожалуйста, используйте это, чтобы проверить: curl -s -D- https: // <yourcomain.com>
apis17
1

Просто добавляю два моих цента. Я пишу веб-приложение, используя запросы CORS и полный веб-сервис RESTful. Я обнаружил, что Chrome выдаст эту ошибку, когда у меня возникнет случайное исключение или возникнет ошибка PHP. Просто если кто-нибудь еще столкнется с проблемой. Я обнаружил, что когда это происходит, я могу запустить приложение Chrome «Почтальон - Клиент отдыха» и выполнить точно такой же запрос, но в приложении Chrome я получаю ошибку PHP, которая выдается вместо этой неописательной ошибки.

JDubDev
источник
1

Я запускал эту проблему, когда пытался загрузить main.js для require js во второй раз после внесения изменений в результате ошибки. Я просто включил в настройках инструментов разработчика "Отключить кэш (когда открыт DevTools)". и это сделало шарм.

Охад Садан
источник
Просто была похожая проблема, при которой видео html5 не загружалось, когда были открыты инструменты разработчика Chrome, так как я оставляю «Отключить кеш (пока открыт DevTools)». Отключение настройки решило проблему.
Anth12
1

Другой возможный сценарий, который я видел, - тот же самый запрос отправляется снова через несколько миллисекунд (скорее всего, из-за ошибки на стороне клиента).
В этом случае вы также увидите, что статус первого запроса «отменен» и что задержка составляет всего несколько миллисекунд.

Эрез Коэн
источник
1

Это происходило для меня, когда у меня была ссылка для скачивания, и после нажатия на нее я пытался также поймать щелчок с помощью jquery и отправить запрос ajax. Проблема заключалась в том, что когда вы нажимаете на ссылку для скачивания, вы покидаете страницу, даже если она не выглядит так. Если бы не было передачи файла, вы бы увидели запрошенную страницу. Поэтому я установил target = "_ blank" для предотвращения этой проблемы.

Айк Агабекян
источник
1

Я получил эту ошибку, когда попытался напечатать страницу во всплывающем окне. Был показан диалог печати, и он все еще ждал моего подтверждения или отмены печати во всплывающем окне, в то время как на главной странице также ожидал в фоновом режиме, показывая сообщение ВНИМАНИЕ, предварительные заголовки отображаются, когда я пытаюсь щелкнуть другую ссылку.

В моем случае решение состояло в том, чтобы удалить window.print ();скрипт, который он выполнял во <body>всплывающем окне, чтобы предотвратить диалог печати.

Арнау Галофре
источник
1

Я видел это, когда число подключений к моему серверу превысило максимальное число подключений на сервер в Chrome, равное 6.

МАБ
источник
1

Используйте этот код из своего кода:

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

Это работает для меня.

Наби КАЗ
источник
0

Вот еще одно решение.

Если вы столкнулись с этой проблемой при вызове $ ajax (), добавьте, http://прежде чем ваш serverhost решит вашу проблему.

var requestURL = "http://" + serverHost;
$.ajax({
    dataType: "json",
    url: requestURL,
    data: data,
    success: success    
});
КТУ
источник
0

Если вы разрабатываете приложение Asp.Net Mvc и пытаетесь вернуть a JsonResultв свой контроллер, обязательно добавьте JsonRequestBehavior.AllowGetв Jsonметод. Это исправило это для меня.

public JsonResult GetTaskSubCategories(int id)
{
    var subcategs = FindSubCategories(id);

    return Json(subcategs, JsonRequestBehavior.AllowGet);  //<-- Notice it has two parameters
}
codingbiz
источник
0

Сообщение «Внимание: показаны временные заголовки» может отображаться, когда веб-сайт, размещенный на HTTPS, вызывает вызовы WebApi, размещенные на HTTP. Вы можете проверить все, если все ваши API-интерфейсы HTTPS. Браузер мешает сделать звонок на небезопасный ресурс. Подобное сообщение вы можете увидеть в своем коде, когда используете FETCH API для домена с HTTP.

Смешанный контент. Страница на https://website.com была загружена по протоколу HTTPS, но запрошен небезопасный ресурс http://webapi.com . Этот запрос был заблокирован; содержание должно быть подано по HTTPS.

Рафаль Ципсер
источник
0

У меня была похожая проблема с моим приложением MEAN. В моем случае проблема возникала только в одном запросе get. Я пытался удалить adblock, пытался очистить кеш и пробовал в разных браузерах. Ничего не помогло

наконец, я понял, что API пытается вернуть огромный объект JSON. Когда я попытался отправить небольшой объект, он работал нормально. Наконец, я изменил свою реализацию, чтобы она возвращала буфер вместо JSON.

Я хочу, чтобы expressJS выдавал ошибку в этом случае.

Чандру
источник
0

Эта проблема также возникает при использовании некоторых пакетов, таких как webpack-hot-middlewareи открытие нескольких страниц одновременно. webpack-hot-middlewareсоздаст соединение для каждой страницы для прослушивания изменений кода, а затем для обновления страницы. У каждого браузера есть max-connections-per-serverограничение, равное 6 для Chrome, поэтому, если вы уже открыли более 6 страниц в Chrome, новый запрос будет зависать там до тех пор, пока вы не закроете несколько страниц.

LCB
источник
0

В моем случае причиной было расширение AdBlock.

Запрос к серверу прошел, и я получил ответ, но не смог увидеть куки-файлы запроса из-за того, что «Предварительные заголовки ...» отображаются в инструментах Dev. После отключения AdBlock для сайта предупреждение исчезло, и инструменты разработчика снова начали показывать файлы cookie.

Чтобы изменения вступили в силу, необходимо было также закрыть инструменты разработки и обновить страницу.

Тармо
источник