2014-09-05 234 views
2

我有一個託管在Microsoft Azure上的MVC 5應用程序(C#)。該應用程序將一些相當大的JSON文檔從服務器返回給客戶端。有誰知道如何打開HTTP壓縮,以便這些文檔被壓縮到客戶端?我已經使用谷歌搜索,但我找不到至少有3-4歲的任何東西。如何啓用HTTP壓縮來壓縮JSON文件

我想一個替代方案是使用壓縮工具壓縮JSON文檔。我試過LZ-String,但我似乎無法使用C#版本壓縮服務器上的文檔,並使用JavaScript版本在客戶端解壓縮,並且生成的JSON文檔被識別。

+0

請看下面的鏈接。 http://stackoverflow.com/questions/2775261/how-to-enable-gzip-http-compression-on-windows-azure-dynamic-content – edokan 2014-09-05 12:55:26

+0

謝謝,但問題已超過4歲,我沒有使用網絡角色。 – 2014-09-05 13:11:07

+0

所以,在你的問題你說什麼服務你在使用?從您的評論看來,這是Azure網站。有了您的聲譽,您應該知道,提到描述您的問題的確切配置是相當重要的......我相信這篇文章將有助於您:http://azure.microsoft.com/blog/2014/01/28/more -to-explore-configuration-options-unlocked-in-windows-azure-web-sites/ – astaykov 2014-09-05 13:39:02

回答

10

爲了使你的MVC控制器的行動JsonResult壓縮需要從web.config文件中啓用動態壓縮:

<system.webServer> 
    <urlCompression doDynamicCompression="true" /> 
    <httpCompression> 
     <dynamicTypes> 
     <add mimeType="application/json" enabled="true" /> 
     <add mimeType="application/json; charset=utf-8" enabled="true" />  
     </dynamicTypes> 
    <staticTypes> 
     <add mimeType="application/json" enabled="true" /> 
     <add mimeType="application/json; charset=utf-8" enabled="true" />  
    </staticTypes> 
    </httpCompression> 
    </system.webServer> 

的工作有確切上面的配置實例在Azure網站免費梯隊發佈,可以測試用簡單的HTTP GET請求:

GET https://double.azurewebsites.net/Home/SomeJson HTTP/1.1 
User-Agent: Fiddler 
Accept-Encoding: gzip, compress 
Host: double.azurewebsites.net 

。注意,Accept-Encoding頭是絕對必要的,以觸發服務器側壓縮。還請注意mime類型application/json; charset=utf-8,它是由ASP.NET MVC5 JsonResult提供的mime類型。

+0

這看起來不錯。這與Web API中的內容協商有什麼關係? Accept頭是通常決定返回的東西。另外,瀏覽器是否自動解壓JSON?所有瀏覽器? – JasonCoder 2014-09-05 14:37:04

+0

偉大的問題。我需要讓所有主流瀏覽器自動對此進行解壓縮,否則我無法使用它。 – 2014-09-05 16:29:07

+0

蘭迪閔,我們在21世紀。所有(主要)瀏覽器都不支持壓縮。這是配置的問題,使瀏覽器能夠發送這個標題。而且你並不想總是發送壓縮的內容 - 只是爲了客戶端無法解壓縮的情況。這些被稱爲網絡標準。稍微檢查一下網頁,然後在發佈諷刺評論之前對accept-encoding標題做一個小的研究!當然,無論請求標題如何,都有辦法壓縮響應 - 正是當你想要符合標準時。只是搜索互聯網... – astaykov 2014-09-06 07:10:22