HTTP-запросы Chrome не завершаются для больших сжатых файлов (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:
Protocols http/1.1
Хром работает.Если я вручную отключить модуль gzip:
a2dismod deflate
Хром работает.
Конечно, ни один из вариантов не идеален для производительности.
Как выстрел в темноте я пытался выключить 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?
Если это вызвано неправильными / отсутствующими заголовками для фрагментированных сжатых ответов HTTP2, может ли кто-нибудь выяснить, какие заголовки требуются? т. е. как правильно обслуживать фрагментированные ответы gzip HTTP2?
1 ответ
Это известная ошибка в Apache, над которой я сейчас работаю. См. https://github.com/icing/mod_h2/issues/143