I have compression enabled within IIS7 and it works as expected on all responses except for those constructed by ASP.NET AJAX. I have a web service that provides data to the client. When the web service is called directly, it is properly compressed. However, when it is called via ASP.NET AJAX, the JSON response is not compressed.
How can I get ASP.NET AJAX to send its JSON response with GZip compression?
IIS7 uses the content-encoding to decide whether to compress the response (assuming of course that the browser can accept gzip). They're set in applicationHost.config, and by default the list is
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
If you call the web service directly, the XML response has a content-type of text/xml
, which gets compressed. When called by AJAX, the JSON response has a content type of application/json
, so it isn't compressed. Adding the following to applicationHost.config should fix that...
<add mimeType="application/json" enabled="true" />
What browser are you using? There's a bug in IE 6 that causes errors in compression. So ASP.NET AJAX turns off compression to IE 6 browsers:
http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx
Also, did you enable compression for ASMX files?
Last I checked, the gzipping was something that IIS does (when setup correctly) - and of course when the browser sends the required headers
In general you don't want to do this unless you wouldn't mind throwing orders of magnitudes the amount of server power into your apps...
Also not only server-CPU but also client-CPU becomes a problem when you do this....
This concludes with that your app becomes WAY slower if you GZip all your Ajax Responses...!