Подтвердить что ты не робот

Файл Gzipped JSON не распаковывается

У меня есть большие (30 МБ +) файлы JSON, хранящиеся на моем сервере как file.json. Используя функцию jQuery getJSON ( "http://site/file.json" ), она работает нормально. Но, как вы, наверное, думаете, что загрузка 30-мегабайтной стоимости ответа JSON требует приличного времени.

Вместо этого я теперь храню их как файлы Gzip'd (file.json.gz), которые сокращают их до 1 МБ! Я хотел бы сделать то же самое, используя getJSON ( "http://site/file.json.gz" ), но похоже, что браузеры не распаковывают ответ GZIP'd, поэтому синтаксический анализ не работает.

Итак, есть ли способ заставить jQuery или браузер распаковать статический JSON файл, сжатый с использованием GZIP, например file.json.gz?

BTW: сохраненные файлы сжимаются должным образом. Если я их вручную распакую, я получаю 30MB + действительный JSON файл.

4b9b3361

Ответ 1

Браузеры автоматически не распаковывают только сжатые данные, с которыми они сталкиваются. Сервер должен сообщить браузеру, что поток сжат только для транспорта, и перед его обработкой необходимо декомпрессировать (в противном случае вы не сможете загружать и сохранять сжатые архивы вообще!). Вам нужно, чтобы ваш веб-сервер отправил соответствующие заголовки (Content-Encoding), но убедитесь, что браузер поддерживает сжатие в первую очередь перед этим (заголовок Accept-Encoding). Большинство веб-серверов могут также gzip вещи для вас "на лету", если только это не слишком велико для производительности.

Как-то у меня такое ощущение, что у вас будет больше проблем с синтаксическим разбором JSON в браузере, чем с его поиском...

Ответ 2

Вам не нужно вручную gzip файл на сервере. Если браузер и, следовательно, базовый XMLHttpObject поддерживают заголовок Accept-Encoding gzip, deflate, тогда файл (ответ) будет заархивирован (дефлирован) сервером перед передачей.

Однако вам нужно настроить свой веб-сервер (если вы используете IIS, проверьте его metase.xml), чтобы применить deflate для ответа в соответствии с входящим заголовком HTTP-запроса.

Конфигурационная справка:

Для веб-сервера Apache обратитесь: http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

Для IIS: http://www.codinghorror.com/blog/2004/08/http-compression-and-iis-6-0.html

Ответ 3

Хотя есть аргументы против этого, можно распаковать gzipped данные с помощью JavaScript. См. этот вопрос и этот вопрос для решений.