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

17

У меня есть большие (30 МБ +) файлы JSON, хранящиеся на моем сервере как file.json. Используя функцию getJSON jQuery («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-файл.

    
задан JacobFischer 02.12.2011 в 02:41
источник
  • Какой веб-сервер? –  Andrew Marshall 02.12.2011 в 02:45
  • Что вам нужно сделать, так это настроить ваш веб-сервер, чтобы gzip ваши ответы JSON с соответствующей кодировкой. Затем сервер будет обрабатывать сжатие, и веб-браузер полностью обработает декомпрессию под прозрачными для вашего кода покрытиями. Я не отправляю это как ответ, так как не знаю ваших обстоятельств. Но так вы должны это делать. –  Strelok 02.12.2011 в 02:47
  • Также возможно предварительно сжатие вашего JSON, а затем просто сообщите Apache, чтобы он обслуживал файлы с соответствующими заголовками, чтобы избежать повторного сжатия. –  Michael Mior 02.12.2011 в 02:50

3 ответа

11

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

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

    
ответ дан Matti Virkkunen 02.12.2011 в 02:48
  • +1 для упоминания служебных данных синтаксического анализа. –  Michael Mior 02.12.2011 в 02:52
2

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

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

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

Для веб-сервера Apache обратитесь: Ссылка

Для IIS: Ссылка

    
ответ дан jatanp 02.12.2011 в 02:46
0

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

    
ответ дан Jakob 16.11.2012 в 08:19