【问题标题】:IIS content-type wrong for compressed CSS压缩 CSS 的 IIS 内容类型错误
【发布时间】:2012-04-25 09:58:15
【问题描述】:

我开发了一个 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 时,它看起来就像文本编辑器中的普通压缩垃圾:

‹...

我仅为该站点关闭了静态内容压缩,现在 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-By 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。

【问题讨论】:

  • 使用 Firebug 之类的工具(或内置的 Chrome 工具)查看 HTTP 标头,您可能会找到答案。
  • 谢谢,不知道你可以在网络面板中做到这一点。我已经用标题更新了我的帖子。

标签: asp.net css iis-7 content-type content-encoding


【解决方案1】:

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

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

类似的问题: ASP.NET site sometimes freezing up and/or showing odd text at top of the page while loading, on load balanced servers

更新

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

这里显示的是,第一次压缩设置Content-Length,第二次压缩无法更改它,因为Content-Length 是写在标题上并且标题在您设置后无法更改*,所以第二次压缩更改最终压缩的一面导致浏览器无法正确读取,然后无法正确解压。

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

【讨论】:

  • 奇怪...使用压缩集,每次加载时都执行 ctrl-refresh 以清除缓存,我得到不同的响应:Content-Length 1728 并且样式表被压缩和损坏,Content-Length 1297并且样式表已压缩并可以正常工作...
  • 好吧,对不起,我是个菜鸟,但我在应用更改时没有重新启动应用程序。事实证明,当压缩打开时,这个 CSS 文件的内容长度正在改变......请原谅我的法语,但是 wtf?
  • @thinkOfaNumber 你可能会得到不同的长度,因为 gzip 是动态压缩的,也许这个改变。想法是不要在代码中以编程方式设置它。
  • 我没有在任何地方以编程方式设置它。奇怪的是数字总是相同的(1728 或 1297),一个总是坏的,一个总是有效的......
  • 这个话题很老了,但我刚才也遇到了同样的问题。它确实是双重压缩:来自 Web 应用的 GZIP 和来自 IIS StaticCompressionModule 的压缩。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
相关资源
最近更新 更多