2012-09-11 14 views
6

Mam tutaj dość duży plik JavaScript, który chcę umieścić na mojej stronie. Serwer HTTP jest wystarczająco inteligentny, aby GZIP plik przed dostarczeniem go do przeglądarki.Dlaczego Safari nie akceptuje kompresji GZIP?

Testowałem jednak z Google Chrome i Safari.

W Chrome działa bardzo dobrze. 400K zejść skompresowane do około 100k:

first

second

ALE kompresji Safari nie działa:

third

fourth

Zabawne th ing jest, w gz2b.png wyraźnie widać, że kodowanie treści jest ustawione na "gzip".


Uwaga: ja już przeczytać na GZIP-Bug w Safari, gdzie pliki nie mogą kończyć się na „.gz” lub Safari nie zaakceptuje GZIP. Ponieważ mój plik nie kończy się na .gz, ten problem nie powinien stanowić problemu.

+0

Nagłówki żądań, które dostałeś na safari, mówią, że zawartość jest GZIP, a jej długość wynosi 119406 bajtów. Jesteś pewien, że narzędzie, którego używasz, mówi ci prawdę? – nos

+0

@nos To to samo narzędzie. Używam tylko inspektora sieci, który jest wbudowany w obie przeglądarki. – Timo

+0

@nos Miałeś rację. Wireshark wyraźnie pokazuje, że plik jest dużo mniejszy niż oryginalny rozmiar. Jeśli chcesz opublikować swój komentarz jako odpowiedź, z przyjemnością oznaczę to jako "właściwą odpowiedź". – Timo

Odpowiedz

7

nagłówki HTTP wysyłane do Safari powiedzieć, że jest skompresowany (Ma Content-Encoding: gzip nagłówek, i mówi Content-Length jest 119406 bajtów) - ja ufam ci bardziej niż pogrubioną liczbą mówiąc 430.61 w Web Inspector. Jak to określa oba numery w górnej kolumnie, nie wiem.

Możesz sprawdzić, ile bajtów przechodzi przez przewód, jeśli odszukasz żądanie HTTP za pomocą wireshark.

9

Znalazłem również ten problem, próbując zoptymalizować czas ładowania strony na iOS7 Safari Mobile.

  • Zakodowane = nieskompresowany rozmiar pliku z serwera
  • Decoded = nieskompresowany FILESIZE, lokalnie
  • Przeniesione = nieskompresowany rozmiar pliku + nagłówki wysyłane i odbierane
  • Content-Length = skompresowany plik wysyłany z serwera

Safari wybrał naprawdę dziwny sposób reprezentowania tych liczb w debugerze.

1

To już dawno temu, ale natknąłem się na bardzo podobny problem lub być może źródło tego problemu. Podczas kompresji danych z gzip na safari tak:

gzip jquery.min.js 

Będziesz skończyć z jquery.min.js.gz który zawiedzie w Safari nawet przy prawidłowo określona jako gzip zakodowany plik strumienia, a także gdy zmieniona na jquery.jgz, jak wspomniano w wielu innych wątkach dotyczących tego problemu. Wygląda na to, że nazwa pliku jest zakodowana w pliku gzip.

Jeśli kodować plik gzip tak:

cat jquery.min.js | gzip > jquery.jgz 

Wtedy masz plik, który jest kilka bajtów mniejszy i ma pracować bezawaryjnie z Safari.

Powiązane problemy