2012-02-29 8 views
7

Używam wbudowanego serwera na moim MacBooku.Jeśli używałem skompresowanych plików JavaScript w formacie gzip, otrzymuję niedozwolone błędy znaków/tokenów zarówno w przeglądarce Chrome, jak i Firefox

Powiedz, że mój skrypt to foo.js. To działa w obu moich przeglądarek testowych (Firefox 10, Chrome 17):

<script type="text/javascript" src="foo.js"></script> 

Gdybym gzip pliku, jednak obie przeglądarki da mi nielegalną błąd żeton/znak po zmienić powyższą linię do tego:

<script type="text/javascript" src="foo.js.gz"></script> 

Co daje? Czy ten typ również wymaga zmiany? Gdzie udokumentowano tego rodzaju praktykę? Ilekroć widzę, jak wspomniano w Internecie, aby "zip swoje skrypty!", Nikt nigdy nie zawraca sobie głowy wspominając, że musisz zrobić coś specjalnego z linkami.

+1

Należy to zrobić w konfiguracji centralnego serwera, wtedy nie musisz zajmować się ręcznie spakowanymi plikami gzip. Nie masz pewności, czy ma to sens na lokalnym serwerze deweloperskim? –

Odpowiedz

7

Serwer internetowy musi poinformować przeglądarkę, że zawartość jest zapakowana w gzip. Odbywa się to za pomocą nagłówka content-encoding. Może możesz skonfigurować swój serwer WWW tak, aby dostarczał ten nagłówek z plikami kończącymi się na .gz.

Zamiast statycznego kompresowania plików, serwer WWW ma często funkcję kompresowania dokumentów w locie. Oznacza to, że umieszczasz normalny plik foo.js w katalogu głównym dokumentu i konfigurujesz serwer WWW, aby skompresował go podczas wysyłania do klienta.

+0

To wygląda na właściwą odpowiedź. Niestety, nie mogę zmienić konfiguracji serwera, aby wysłać poprawny nagłówek. Odkomentowałem linie AddEncoding w pliku /etc/apache2/httpd.conf i zrestartowałem serwer, ale jego zachowanie się nie zmieniło. –

+1

dlaczego dynamicznie kompresować zasoby statyczne? to nie ma sensu, prawda? skompresuj je w procesie kompilacji. –

2

Ten błąd może również wystąpić, jeśli ustawienie gzip jest zbyt wysokie. Próbowałem już gzip -9 i nawet przy wysyłaniu prawidłowego kodowania treści otrzymałem ten błąd. Kiedy po prostu uruchomiłem zwykły gzip, poprzez gzip file.js, to działa poprawnie.

+1

huh ciekawe, spróbuję tego –

1

Miałem podobny błąd. Sprawdź kartę sieci odpowiadającą twojemu foo.js. W nagłówku odpowiedzi żądany nagłówek powinien mieć Content-Encoding: gzip i Content-Type: application/javascript. W przeciwnym razie przeglądarka nie rozpakuje Twojego pliku. Przeglądarka powinna wiedzieć, jaki rodzaj kodowania treści jest wykonywany nad plikiem.

Powiązane problemy