gpt4 book ai didi

asp.net - 使用 httpModule 手动启用压缩

转载 作者:行者123 更新时间:2023-12-02 16:51:25 24 4
gpt4 key购买 nike

我正在尝试在我们的工作 Intranet 上的网站上启用 gzip 压缩。不幸的是,我无法访问 IIS,因此我所做的任何更改都是通过 web.config 进行的。

服务器正在运行 IIS 6 和 .NET 2.0。

我通过添加 httpmodule 启用了压缩

public class EnableCompression : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest +=
(new EventHandler(this.Application_BeginRequest));

}

private void Application_BeginRequest(Object source, EventArgs e)
{
HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;
}

}

我在 web.config 中注册了...

<system.web>
<httpModules>
<add name="EnableCompression" type="EnableCompression"/>
</httpModules>
</system.web>

嗯,上面的方法工作得很好,除了 javascript 和 css 文件没有被压缩。根据我的发现,我必须将 .js 和 .css 添加到 IIS 6 中的应用程序映射中,但我当然不能这样做。

显然这可以通过 web.config 文件来完成,但我不知道该怎么做。

如何启用 .js 和 .css 文件压缩?

最佳答案

在IIS6中,静态代码不被托管处理HttpModules ;它需要一个 native ISAPI。

您可以使用的一个技巧是将 *.js 和 *.css 文件转换为动态文件。您可以通过将它们更改为 *.aspx 并将 ContentType 设置为正确的 MIME 类型来完成此操作。例如:

this.Response.ContentType = "application/x-javascript";

唯一的其他技巧是设置 StyleSheetTheme=""在标记文件的 Page 指令中。否则,运行时将坚持 <head>文档中的部分。您可以启用输出缓存以最大限度地减少性能影响。

我在 JS 方面写了一篇关于此的博客文章,以防有帮助(CSS 类似,只是 MIME 类型不同):http://www.12titans.net/p/dynamic-javascript.aspx

不幸的是,这需要更改应用程序中 JS 和 CSS 文件的名称,但如果您想要压缩并且无法访问 IIS,我认为没有办法解决这个问题。

如果您想保留 *.js 和 *.css 扩展名,可以通过在 web.config 中添加它们的处理程序来实现。例如:

<compilation>
<buildProviders>
<add extension=".css" type="System.Web.Compilation.PageBuildProvider"/>
</buildProviders>
</compilation>

<httpHandlers>
<add path="*.css" verb="*" type="System.Web.UI.PageHandlerFactory"
validate="true"/>
</httpHandlers>

从命名的角度来看,这有帮助,但对性能没有帮助;这些文件仍然是动态的——它们基本上是 *.aspx 文件,但具有不同的扩展名。它也无法与 ASP.NET 主题一起正常工作,因为主题文件夹中的页面不能是动态的,无论其扩展名如何。

关于asp.net - 使用 httpModule 手动启用压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8766085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com