【问题标题】:HTTP Compression with ASP.NET 4.0 and IIS7使用 ASP.NET 4.0 和 IIS7 进行 HTTP 压缩
【发布时间】:2011-02-13 20:21:30
【问题描述】:

一段时间以来,我一直在尝试在一些网站上实施 HTTP 压缩。

我尝试使用以下两种技术的变体来实现 HTTP 压缩:

From Application_BeginRequest in Global.asax

From a custom HttpModule

在这两种情况下,它最初似乎都有效。但是,当我浏览网站时,我很快就失去了我的 CSS 样式。并且浏览器报告一个 JS 文件包含无效字符。而且,在某些时候,整个网站完全变成了垃圾。

我真希望我知道这里发生了什么。有人有什么建议吗?是因为这些技术只适用于旧版本的 ASP.NET/IIS?

编辑:我无权访问 IIS,因此不需要它。随着 ASP.NET 和 IIS 的最新迭代,越来越多的控制权被赋予 web.config 而无需触及 IIS。这应该在不深入研究 IIS 的情况下得到完全支持,事实上,上面的两个链接声称他们能够做到这一点。我就是无法让它为我工作。

编辑:进一步检查,使用上面第二个链接中的代码(HTTP 模块),我可以看到模块处理程序正在为我的站点上的所有文件类型调用。这显然是问题的一部分。 (请注意,在某些情况下,整个页面都会变成垃圾,这表明存在其他问题。)任何人都可以建议什么决定哪些文件被发送到 HTTP 处理程序,或者为什么该链接上的代码可能对其他人有效,但对我无效?

【问题讨论】:

  • 你引用的压缩方法只适用于动态aspx代码。 CSS 和 JS 是静态文件,只能通过配置 IIS 进行压缩。这些请求通常不会由 ASP.NET 处理,除非您重新配置 IIS 以强制它们处理。
  • @Samuel:我没有做出任何影响 ASP.NET 处理哪些文件的更改。我可以告诉你更多,但坦率地说,我不知道还能去哪里看。
  • @Samuel:我今天花了一些时间试图弄清楚到底发生了什么。使用我的问题中第二个链接中的代码(创建 HTTP 模块),我可以看到正在为所有文件类型(页面、CSS、javascript 和图像)调用模块处理程序。这显然是问题的一部分。为什么它对我来说表现不同?我没有看到文章提到文件类型的地方。但是,请注意,最终整个页面似乎变成了乱码,所以我可能有不止一个问题。
  • @Jonathan Wood,使用 http 代理查看实际通过网络发送的内容。我更喜欢 Charles (charlesproxy.com) 但 Fiddler 也很好用。当你说“胡言乱语”时,你真的能说出它是什么吗?它是 gzip'd 但没有被标记为 gzip'd 并因此没有在客户端上正确解压缩吗?也许它是双压缩的?
  • @Samuel:我一直忙于其他项目,但修改了从我发布的第二个链接获得的代码,以便仅在扩展名为“。”时进行压缩。或“.aspx”。一些快速测试似乎表明这是可行的。我仍然不明白为什么要处理非 ASP.NET 页面或原始代码如何工作。 “胡言乱语”是指充满无意义字符的未格式化页面,就好像我正在查看压缩数据一样。在它起作用之前,我不愿意把它放在网上。这些代理应用程序会在本地工作吗?我会寻找什么?

标签: asp.net iis-7 asp.net-4.0 http-compression


【解决方案1】:

IIS 7 supports compression natively - 不需要任何编码。除非您尝试在尚未启用它的托管服务提供商上实施它,但您的问题中并没有明确说明

【讨论】:

  • 正如我一直在尝试的技术的链接中所展示的那样,我想在 ASP.NET 端处理这个问题。鉴于 ASP.NET 4.0 和 IIS7 之间改进的集成,这应该是可能的。而且,看看这些链接,似乎人们正在这样做。
【解决方案2】:

虽然我可能在这里遇到了一些问题,但Walkthrough: Creating and Registering a Custom HTTP Module 的以下引用似乎说明了问题:

如果 ASP.NET 应用程序在 IIS 6.0 下运行,您可以使用 HTTP 模块自定义对由 ASP.NET 提供服务的资源的请求。这包括 ASP.NET 网页(.aspx 文件)、Web 服务(.asmx 文件)、ASP.NET 处理程序(.ashx 文件)以及您已映射到 ASP.NET 的任何文件类型。如果 ASP.NET 应用程序在 IIS 7.0 下运行,则可以使用 HTTP 模块自定义对 IIS 提供的任何资源的请求。这不仅包括 ASP.NET 资源,还包括 HTML 文件(.htm 或 .html 文件)、图形文件等。

正如我开始怀疑的那样,这是 ASP.NET 4.0 和 IIS7 中的一个变化。正如我多次提到的,这些正在变得越来越集成。上面的引用表明 HTTP 模块现在可以处理 IIS 提供的所有文件类型。

这就是为什么旧代码对我不起作用的原因。修复似乎是从我的处理程序中简单地检查文件类型类型。

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 2011-02-12
    • 2010-10-21
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多