我正在实现HttpModule来压缩请求。 下面是HttpModule的代码:
public class Global : IHttpModule
{
public void Init(HttpApplication app)
{
app.PostReleaseRequestState += new EventHandler(app_PostReleaseRequestState);
}
void app_PostReleaseRequestState(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpContext context = app.Context;
string acceptEncoding = context.Request.Headers["Accept-Encoding"];
// If gzip is supported then gzip it else if deflate compression is supported then compress in that technique.
if (acceptEncoding.Contains("gzip"))
{
// Compress and set Content-Encoding header for the browser to indicate that the document is zipped.
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
context.Response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.Contains("deflate"))
{
// Compress and set Content-Encoding header for the browser to indicate that the document is zipped.
context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
context.Response.AppendHeader("Content-Encoding", "deflate");
}
}
它可以拦截和压缩开发Web服务器中的js和css,但是当我从IIS 5.1运行它时 它无法压缩js和css文件。 请帮忙。
答案 0 :(得分:1)
我会确保.js和.css文件由.NET框架处理。
可以在iis.net/ConfigReference/system.webServer/handlers
找到IIS 7及更高版本的参考资料。关于IIS 6,您可以检查js和css是否在以下位置处理: 站点设置/主目录/应用程序设置/(应用程序池)配置/映射
答案 1 :(得分:1)
在IIS7之前,将非ASP.NET文件类型转换为ASP.NET管道需要设置文件类型映射以通过ISAPI重定向这些文件。如果您要映射*.js
和*.css
以供ISAPI处理,那么您的代码应该开始针对这些请求运行。
以下是an example of doing that in IIS6(尽管您希望将*.js
和*.css
替换为*.asp
)。如果我没记错的话,5.1的管理界面足够相似,以至于ScottGu的例子仍然有用。
答案 2 :(得分:0)
你使用HttpModule走在正确的轨道上。但是,为了更改HTML内容,您将使用HttpApplication.PostReleaseRequestState处理程序。要更改资源文件,您可以使用HttpApplication.BeginRequest处理程序。