О чем net::ERR_HTTP2_PROTOCOL_ERROR?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 О чем net::ERR_HTTP2_PROTOCOL_ERROR?

Сообщение Anonymous »

В настоящее время я работаю над веб-сайтом, который вызывает ошибку net::ERR_HTTP2_PROTOCOL_ERROR 200 в Google Chrome. Не знаю точно, что может спровоцировать эту ошибку, просто заметил, что она выскакивает только при доступе к сайту по HTTPS. Я не могу быть на 100% уверен, что это связано, но похоже, что это мешает правильному выполнению JavaScript.
Например, происходит следующий сценарий:
  • Я захожу на сайт по протоколу HTTPS
  • Моя лента Twitter интегрирована через https ://publish.twitter.com вообще не загружается
  • Я вижу в консоли ERR_HTTP2_PROTOCOL_ERROR
  • Если я удалю код загрузки ленты Twitter, ошибка останется
  • Если я захожу на сайт по HTTP, появляется канал Twitter и ошибка исчезает
Google Chrome – единственный веб-браузер, вызывающий ошибку: он хорошо работает как в Edge, так и в Firefox.
(Примечание: я пробовал с Safari, и у меня аналогичная ошибка kcferrordomaincfnetwork 303)
Мне было интересно, может ли это быть связано с заголовком, возвращаемым сервером, поскольку в ошибке есть упоминание «200», а страница 404/500 ничего не запускает.
Дело в том, что ошибка вообще не задокументирована. Поиск Google дает мне очень мало результатов. Более того, я заметил, что он появляется в самых последних выпусках Google Chrome; ошибка не появляется в версии 64.X, но появляется в версии 75+ (независимо от ОС; хотя я работаю на Mac).

Может быть связано с тем, что веб-сайт в порядке в Firefox, но не в Safari (ошибка kCFErrorDomainCFNetwork 303), ни в Chrome (net::ERR_SPDY_PROTOCOL_ERROR)

Выводы дальнейшие исследования показали следующее:
  • ошибка не появляется на той же странице, если сервер возвращает 404 вместо 2XX< /li>
    ошибка не появляется локально с сертификатом HTTPS
  • ошибка появляется на другом сервере (оба являются OVH), который использует другой сертификат< /li>
    ошибка появляется независимо от используемой версии PHP: от 5.6 до 7.3 (используемая платформа: Cakephp 2.10)
По запросу ниже приведен возвращенный заголовок для отказавшего ресурса, которым является вся веб-страница. Даже если ошибка возникает на каждой странице, имеющей HTTP-заголовок 200, эти страницы всегда загружаются в браузере клиента, но иногда какой-либо элемент отсутствует (в моем примере — внешний канал Twitter). Для всех остальных ресурсов на вкладке «Сеть» отображается успешный результат, за исключением самого документа.
Изображение

Заголовок Google Chrome (с ошибкой):
[img]https://i.sstatic .net/0wCrD.png[/img]

Заголовок Firefox (без ошибок):
Изображение

Запрос Curl --head --http2 в консоли возвращает следующий успех:

Код: Выделить всё

HTTP/2 200
date: Fri, 04 Oct 2019 08:04:51 GMT
content-type: text/html; charset=UTF-8
content-length: 127089
set-cookie: SERVERID31396=2341116; path=/; max-age=900
server: Apache
x-powered-by: PHP/7.2
set-cookie: xxxxx=0919c5563fc87d601ab99e2f85d4217d; expires=Fri, 04-Oct-2019 12:04:51 GMT; Max-Age=14400; path=/; secure; HttpOnly
vary: Accept-Encoding
Попытка углубиться с помощью инструментов chrome://net-export/ и https://netlog-viewer.appspot.com говорит мне запрос заканчивается RST_STREAM :

Код: Выделить всё

t=123354 [st=5170]    HTTP2_SESSION_RECV_RST_STREAM
--> error_code = "2 (INTERNAL_ERROR)"
--> stream_id = 1
Что я прочитал в другом посте: «В HTTP/2, если клиент хочет прервать запрос, он отправляет RST_STREAM. Когда сервер получает RST_STREAM, он прекратит отправку кадров DATA клиенту, тем самым остановив ответ (или загрузку). Соединение по-прежнему можно использовать для других запросов, а запросы/ответы, которые были одновременными с прерванным, могут продолжать выполняться.
[...]
Возможно, что к моменту прохождения RST_STREAM от клиента к серверу все содержимое запроса находится в пути и дойдет до клиента, который, однако, его отбросит. , для большого содержимого ответа отправка RST_STREAM может иметь хорошие шансы поступить на сервер до того, как будет отправлено все содержимое ответа, и, следовательно, сэкономит полосу пропускания."
The описанное поведение такое же, как то, которое я наблюдаю. Но это означало бы, что виноват браузер, и тогда я бы не понял, почему это происходит на двух одинаковых страницах, одна из которых имеет заголовок 200, а другая 404 (то же самое произойдет, если я отключу JS).

Подробнее здесь: https://stackoverflow.com/questions/582 ... rror-about
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»