IIS7 内で圧縮を有効にしましたが、ASP.NET AJAX によって構築されたものを除くすべての応答で期待どおりに動作します。クライアントにデータを提供する Web サービスがあります。Web サービスが直接呼び出されると、適切に圧縮されます。ただし、ASP.NET AJAX 経由で呼び出された場合、JSON 応答は圧縮されません。
ASP.NET AJAX で JSON 応答を GZip 圧縮で送信するにはどうすればよいですか?
IIS7は、コンテンツエンコーディングを使用して、応答を圧縮するかどうかを決定します(もちろん、ブラウザーがgzipを受け入れることができると想定しています)。これらはapplicationHost.configで設定され、デフォルトでリストは次のようになります。
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
Webサービスを直接呼び出す場合、XML応答のコンテンツタイプはtext/xml
、圧縮されます。AJAXによって呼び出された場合、JSON応答のコンテンツタイプはapplication/json
。であるため、圧縮されません。以下をapplicationHost.configに追加すると、修正されるはずです...
<add mimeType="application/json" enabled="true" />
どのブラウザを使用していますか? IE 6 には、圧縮エラーを引き起こすバグがあります。したがって、ASP.NET AJAX は IE 6 ブラウザへの圧縮をオフにします。
http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx
また、ASMX ファイルの圧縮を有効にしましたか?
一般に、アプリに桁違いのサーバーパワーを投入することを気にしない限り、これを行いたくありません...
また、これを行うとサーバーCPUだけでなくクライアントCPUも問題になります....
これは、すべての Ajax レスポンスを GZip すると、アプリの速度が大幅に低下するということで終わります...!
最後に確認したところ、gzip は IIS が行うものでした (正しくセットアップされた場合) - そしてもちろん、ブラウザが必要なヘッダーを送信するとき