5

你好。

HttpContext.RewritePath用来根据请求和主机将请求定向到内部站点文件夹。

问题:当我对 IIS 缓存和 GZIPped 的任何静态文件执行任何需要 RewritePath 的请求时,我得到的响应是带有标题的原始非压缩文件内容Content-Encoding: gzip,这导致“内容解码失败”错误。但是,当我执行相同的请求但使用完整的目录路径时(在这种情况下,我的代码中跳过了 RewritePath)我得到了正确的 gzip 压缩内容Content-Encoding: gzip


例如:
出现错误的情况:
请求 url:localhost/lib/ext_3.4.0/resources/css/ext-all.css
使用 HttpContext.RewritePath 将请求路径重写为:localhost/_sites/mainSite/lib/ext_3.4.0/resources/css/ext-all.css

第一个响应不是压缩的——通常的 IIS 行为。当我按 ctrl+F5 时,出现“内容解码失败”错误。通过使用 Fiddler2,我可以看到响应内容未压缩,并且包含Content-Encoding: gzip标头。

没有错误的情况:
请求url:localhost/_sites/mainSite/lib/ext_3.4.0/resources/css/ext-all.css
请求路径没有被重写,因为它不需要。

第一个响应不会再次压缩。当我按 ctrl+F5 时,我得到正常的文件内容。通过使用 Fiddler2,我可以看到响应内容被压缩,大小减少了 5 倍,并且包含Content-Encoding: gzip标题。


我不能扔掉 RewritePath,我需要 IIS gzip。有没有办法让他们成为朋友?

4

0 回答 0