Сжатый файл JSON не распаковывается - PullRequest
18 голосов
/ 02 декабря 2011

У меня есть большие (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, поэтому его разбор не работает.

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

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

Ответы [ 3 ]

11 голосов
/ 02 декабря 2011

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

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

2 голосов
/ 02 декабря 2011

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

Однако вам необходимо настроить свой веб-сервер (при использовании IIS, пожалуйста, проверьте его metaase.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

1 голос
/ 16 ноября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...