У меня очень странная проблема с моим сервером apache (v2.2.16 работает на debian 6.0.5). У меня включен mod_deflate для обслуживания сжатого содержимого, а в Chrome, Firefox и т. Д. Он работает нормально, без проблем. Однако в Safari принимается и распаковывается только частичный контент.
Еще одно замечание: перед Apache есть сервер Nginx, проксирующий контент - поэтому запрос попадет в nginx, будет проксирован в Apache, затем ответ будет возвращен в nginx, а затем отправлен обратно. Однако сервер Apache выполняет сжатие - сжатие на сервере nginx отключено.
Страница http://www.fastaval.dk/aktiviteter/rollespil/
Та же проблема возникает при попытке протестировать страницу с помощью валидатора W3C: http://validator.w3.org/check?uri=http%3A%2F%2Fwww.fastaval.dk%2Faktiviteter%2Frollespil%2F&charset=%28detect+automatically%29&doctype=Inline&group=0 Это также не работает и предполагает, что сжатый контент каким-то образом поврежден.
Однако, если я попытаюсь просто загрузить файл gzip для ручной распаковки с помощью gunzip, я получу совершенно правильный файл gzip. Я пробовал использовать как wget, так и curl - оба выводят действительный файл, никаких проблем.
За исключением отключения mod_deflate для Safari, как я могу устранить эту проблему? И что может вызвать эту проблему?
Это будет зависеть от ряда факторов.
Chunked
content-transfer не отправляет заголовок Content-Length:, поэтому прокси-сервер должен получить весь файл, прежде чем он сможет узнать размер. Это может по-разному мешать работе клиентов, как, похоже, в случае с вашими тестами Safari.
Я бы посоветовал вам выполнить tcpdump часть трафика и посмотреть, есть ли различия между, скажем, Safari и FF по заголовкам.
Если кажется, что это чисто на стороне клиента, то есть как Safari интерпретирует контент, вам, возможно, придется добавить BrowserMatch или два, чтобы пропустить deflate для этого клиента.