4

我开发了一个 ASP.NET 站点的一部分,该站点主要使用主题,但在主题文件夹中有几个 CSS 文件。这些由另一个开发人员包含在 web.config 中,如下所示:

<Content Include="App_Themes\SoftOrange\CMSStyles.css" />
<Content Include="App_Themes\SoftOrange\ContentStyles.css" />

在我们的内部测试服务器(IIS7、Server 2008 R2 Enterprise)上,对于大于 2700 字节的文件,静态和动态压缩的全局 IIS 管理器选项已打开。还启用了特定于站点的静态和动态压缩。

在某些时候(可能是当 CMSStyles.css 达到 2700 字节时)一些样式被塞满了 - 即。显然没有通过查看页面加载。我发现内容类型(根据 firefox 7.0.1)显示的是 text/css,当我加载 CMSStyles.css 的 URL 时,它看起来像是文本编辑器中的普通压缩垃圾:

‹������
等 IE 不直接打开 css 文件,但是当我使用开发者工具显示 css 时,它显示为空。

我仅为该站点关闭了静态内容压缩,现在 CSS 文件可以正确加载。我的问题是为什么?!是内容类型问题、内容编码问题,还是 IIS 问题,还是 Web 应用程序中使用 CSS 的方式问题?

谢谢。

编辑:

这些是 CMSStyles.css 的 GET 请求的标头: 响应标头

接受范围字节
内容编码 gzip
内容长度 1728
内容类型文本/css
日期 2012 年 4 月 13 日星期五 01:22:43 GMT
电子标签“80a762a82cecd1:0”
最后修改时间 2012 年 3 月 30 日星期五 04:22:03 GMT
持久验证真
服务器 Microsoft-IIS/7.5
改变接受编码
X-Powered-由 ASP.NET

请求标头

接受文本/css,*/*;q=0.1
接受字符集 ISO-8859-1,utf-8;q=0.7,*;q=0.7
接受编码 gzip,放气
接受语言 en-gb,en;q=0.5
连接保持活动
饼干-删除-
主机 - 已移除 -
推荐人-已删除-
用户代理 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

所以看起来内容编码是正确的:gzip。

4

1 回答 1

2

这里的问题(根据我在类似问题中的经验)是Content-Length.

检查您是否Content-Length在代码的任何部分中设置了,将其删除,它将再次起作用。这是为什么 ?因为如果您设置了Content-Lengthon 标头,IIS 将无法将其更改为压缩的标头,并且 gzip 的解压缩失败。为什么IIS改不了呢?因为默认情况下,如果您在 IIS 上设置标头,则此标头将保留并且无法更改(特别是如果您提前刷新它)。有一个标志可以让 IIS 在设置后更改它,但最好避免设置它。

类似的问题: 在负载平衡的服务器上加载时,ASP.NET 站点有时会冻结和/或在页面顶部显示奇怪的文本

更新

来自@thinkOfaNumber:原来我使用的是 devexpress 压缩和 IIS 压缩。我在 web.config 中关闭了 devexpress 压缩,它可以工作了!

这里显示的是第一次压缩设置Content-Length和第二次压缩无法更改它,因为Content-Length在头上写入并且头在您设置后无法更改*,因此第二次压缩更改最终压缩端,结果浏览器没能正确读取,然后没能正确解压。

[*] 有一种方法可以在您在 IIS 上发送它们之后,在将它们发送到浏览器之前更改标题,这可以通过更改 IIS 的默认行为来完成,但不是那么容易,我不知道是否可以解决这个问题。

于 2012-04-13T03:38:20.793 回答