Запросы Chrome HTTP2 не завершаются для больших gzip-файлов (Apache)

Недавно я обновил Aapche до 2.4.26 (ondrej ppa) в Ubuntu 16.04. По умолчанию модули deflate и http2 включены.

В Chrome при обслуживании больших файлов JS запрос просто не завершается и завершается с ошибкой net :: ERR_CONNECTION_CLOSED по истечении длительного времени (по сути, времени, указанного параметром Apache Timeout ). В Firefox все работает отлично.

То, что я пробовал

Я заметил во время устранения неполадок:

  • Маленькие файлы JS работают нормально. У меня был большой JS-файл размером 259,43 КБ (75,78 КБ в сжатом виде)

  • Если я отключу HTTP2 в Apache: Протоколы http / 1.1 , Chrome будет работать.

  • Если я вручную отключу модуль gzip: ] a2dismod deflate , Chrome работает.

Конечно, ни один из вариантов не идеален для производительности.

В качестве снимка в темноте я попытался отключить KeepAlive , как было предложено в ответе в этом вопросе: https://stackoverflow.com/questions/25847083/chrome-just-doesnt-finish-loading-js-files . Это не решает проблему.

Я скопировал HTTP-заголовки проблемного JS-файла из Chrome Developer Tools:

Заголовки запросов HTTP

:authority: example.com
:method:GET
:path:/js/main.js
:scheme:https
accept:*/*
accept-encoding:gzip, deflate, br
accept-language:en-US,en;q=0.8
cache-control:no-cache
pragma:no-cache
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36

Заголовки ответов HTTP

accept-ranges:bytes
cache-control:max-age=7200
content-encoding:gzip
content-type:application/javascript; charset=utf-8
date:Mon, 03 Jul 2017 07:23:27 GMT
last-modified:Thu, 01 Jun 2017 14:49:09 GMT
server:Apache
status:200
vary:Accept-Encoding
x-content-type-options:nosniff

Я немного читал, и это могло иметь какое-то отношение к фрагментированным ответам gzip без заголовка ответа Content-Length . Это также может быть связано с отсутствием заголовка ответа Transfer-Encoding . Но я не уверен, что делать правильно или как заставить Apache выводить эти заголовки.

Вопросы

, в чем проблема? Как я могу включить HTTP2 с gzip на моем веб-сервере Apache?

Если это вызвано неправильными / отсутствующими заголовками для фрагментированных gzip-ответов HTTP2, может ли кто-нибудь уточнить, какие заголовки требуются? то есть, как правильно обслуживать фрагментированные ответы HTTP2 с помощью gzip?

0
задан 3 July 2017 в 10:57
1 ответ

Это известная ошибка в Apache, над которой я сейчас работаю. См. https://github.com/icing/mod_h2/issues/143

0
ответ дан 5 December 2019 в 07:51

Теги

Похожие вопросы