我正在使用一個CompressionModule在web.config中使用,我已經打破了一個更大的問題到這種情況下,我難住。無法設置GzipStream和內容編碼gzip在相同的響應
在這個例子中,我創建了一個新的MVC4互聯網應用,並取得了以下修改web.config中:
<handlers>
<!--
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
-->
<add name="Content" path="*" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" />
</handlers>
<modules>
<remove name="monorailRouting" />
<add name="compressionModule" type="Platform.Web.CompressionModule" />
<!--
<add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-->
</modules>
其中壓縮模塊
namespace Platform.Web {
public class CompressionModule : IHttpModule {
#region HTTP Header Constants
private const string DEFLATE = "deflate";
private const string GZIP = "gzip";
private const string CONTENT_ENCODING = "Content-Encoding";
private const string ACCEPT_ENCODING = "Accept-Encoding";
private const string VARY = "Vary";
#endregion
#region IHttpModule Members
public void Dispose() {
//noop
}
public void Init(HttpApplication context) {
context.BeginRequest += new EventHandler(context_CompressResponse);
}
void context_CompressResponse(object sender, EventArgs e) {
HttpApplication app = (HttpApplication)sender;
string encodings = app.Request.Headers.Get(ACCEPT_ENCODING);
if (encodings == null)
{
return;
}
encodings = encodings.ToLower();
if (encodings.Contains(GZIP))
{
//1
app.Response.Filter = new GZipStream(app.Response.Filter, CompressionMode.Compress);
//2
app.Response.AppendHeader(CONTENT_ENCODING, GZIP);
}
app.Response.AppendHeader(VARY, CONTENT_ENCODING);
}
#endregion
}
}
而且我遇到了以下問題:
如果第1行和第2行存在,則應用程序加載正常。但是沒有任何東西顯然是在頭文件中壓縮的,也不是正文。我通過Fiddler來確定這一點。
如果第1行存在,但2應用程序加載但不可讀的gzip爲 顯示在瀏覽器中。
如果第1行不存在,但2應用程序無法加載,但 內容編碼:gzip位於標題中。
任何人有什麼我可能做錯的建議嗎?
不行。我只是得到一個類似於我的第一種情況的未壓縮的響應。 –