web-dev-qa-db-ja.com

Gzip圧縮されたJSONファイルが解凍されない

大きな(30MB以上)JSONファイルがfile.jsonとしてサーバーに保存されています。 jQueryのgetJSON( "http://site/file.json")関数を使用すると、問題なく機能します。しかし、おそらく30MB相当のJSON応答をダウンロードするには、かなりの時間がかかると思うでしょう。

代わりに、Gzipで圧縮したファイル(file.json.gz)として保存しているため、1MB弱に削減されます。 getJSON( "http://site/file.json.gz")を使用して同じことをしたいのですが、ブラウザーはGZIPの応答を解凍しているようですnot解析は機能しません。

それで、jQueryまたはブラウザーにfile.json.gzなどのGZIPを使用して圧縮された静的JSONファイルを解凍する方法はありますか?

ところで:保存されたファイルは適切に圧縮されています。それらを手動で解凍すると、30MB以上の有効なJSONファイルが得られます。

19
JacobFischer

ブラウザは、遭遇した圧縮データだけを自動的に解凍するわけではありません。サーバーは、ストリームがトランスポートのためにのみ圧縮され、処理する前に解凍する必要があることをブラウザーに通知する必要があります(そうしないと、圧縮されたアーカイブをダウンロードして保存することができません!)Webサーバーに送信する必要があります適切なヘッダー(Content-Encoding)ですが、それを行う前に、ブラウザーが最初に圧縮をサポートしていることを確認してください(Accept-Encodingヘッダー)。ほとんどのWebサーバーは、パフォーマンスに大きな影響がない限り、その場でgzip圧縮することもできます。

どういうわけか、ブラウザでJSONを取得するよりも解析するのに苦労するだろうと感じています...

11
Matti Virkkunen

サーバー上でファイルを手動でgzip圧縮する必要はありません。ブラウザ、したがって基盤となるXMLHttpObjectがAccept-Encoding gzip、deflateヘッダーをサポートしている場合、ファイル(応答)は送信前にサーバーによって圧縮(圧縮)されます。

ただし、着信HTTP要求のヘッダーに従って、応答時にdeflateを適用するようにWebサーバーを構成する必要があります(IISを使用している場合は、そのmetabase.xmlを確認してください)。

構成ヘルプ:

Apache Webサーバーについては、以下を参照してください: 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

2
jatanp

そうすることに反対する議論がありますが、JavaScriptでgzip圧縮されたデータを解凍することができます。解決策については、 この質問 および この質問 を参照してください。

1
Jakob