页面在Firefox上显示随机符号而不是错误消息

时间:2010-11-10 10:37:58

标签: asp.net iis-7 gzip

随机地,在一些项目中,一些页面显示随机符号而不是错误消息。像这样:

I�%&/m�{J�J��t�� $ @ iG#) * eVe] f @ 흼 { { ; N' ?\fdl J ɞ! ?〜|?“ Ey ')= y6 h Ųi - ez 7i ޴IL,4̧iΊeϾ| UZ:} ∪{΋〜 ȗu.- l&gt;F' Y l $k tF { [ 'U |6J lR b6 юG k ^,ӏ ߿ }&lt;〜&lt; ;c R鱕iV m | yDl tRͮ < em> |N &gt; Ey 裟k !z Ѳ Y)5 G A 8$D Ѥ̦oI ] P “ / v [W〜m`NrvkMqz3wV

它是随机发生的,似乎是由不同的因素引起的。在这里,它是在文件上传。

我们在此页面上使用SharpZipLib,但代码路径不应使用它。

有谁知道为什么会这样,以及如何预防?

编辑:它只发生在Firefox上。 IE(8)正确显示错误消息。

编辑2:它似乎很随机,只在某些网页/网站上发生。另一个IIS站点上的同一页面运行良好。它似乎只在IIS7上这样做;我没有IIS6上的报告,我没有在我的开发机器上遇到它。

编辑3:看起来只有在网页崩溃时才会发生。

编辑4:好的,所以,它只在IIS7上发生,并且只有在我收到错误500时才会发生。我认为可能是IIS错误页面有问题。我怎样才能尝试改变它们?

Firebug给了我那些标题:

响应
缓存控制私有
Content-Type text / html;字符集= UTF-8
服务器Microsoft-IIS / 7.0
X-AspNet-Version 2.0.50727
X-Powered-By ASP.NET
Date Mon,04 Apr 2011 10:31:24 GMT
内容长度2284
请求
主持人xxxx
用户代理Mozilla / 5.0(Windows; U; Windows NT 6.1; fr; rv:1.9.2.16)Gecko / 20110319 Firefox / 3.6.16(.NET CLR 3.5.30729; .NET4.0E)
接受text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
接受语言fr,fr-fr; q = 0.8,en-us; q = 0.5,en; q = 0.3
接受编码gzip,deflate
Accept-Charset ISO-8859-1,utf-8; q = 0.7,*; q = 0.7
保持活力115
连接保持活着
Referer xxxxx
Cookie xxxxxx

有没有办法让我说“在这个页面上,我根本不接受gzip压缩”?

4 个答案:

答案 0 :(得分:8)

我没有找到任何真正的解决方案,但我找到了令人满意的解决方法。

请记住,问题只出现在这些条件下:

  • 该网站在IIS7 / Windows Server 2008上配置。
  • 显示垃圾符号的页面实际上已崩溃。事实上,生成的“垃圾”是一个没有解压缩的gzip压缩错误消息,或类似的东西。
  • 对动态或静态内容禁用gzip压缩不会改变任何内容

解决方法很简单:拒绝浏览器中的gzip压缩内容。在Firefox中,如http://forgetmenotes.blogspot.com/2009/05/how-to-disable-gzip-compression-in.html中所示:

  1. 在网址栏中输入about:config(接受免责声明)
  2. 在网址栏下方的过滤器字段中输入编码
  3. 双击“network.http.accept-encoding”
  4. 清空值
  5. 在我的网站上,它使用CSS做了一些奇怪的事情(并且StackOverflow之后根本没有任何CSS),但至少它正确地向我显示了错误消息,这使我能够修复错误。

    希望它会帮助别人。

答案 1 :(得分:7)

任何遇到这种情况的人的另一种解决方法可能是删除应用程序错误的响应过滤器,这将消除编码并通过未压缩发送它。由于这仅用于错误消息,因此对性能的影响应该是最小的。

在你的Global.asax

VB

Sub Application_Error()
    Response.Filter = Nothing
End Sub

C#(我认为这是对的,请参阅下面的博客链接)

protected void Application_Error(object sender, EventArgs e)
{
    Response.Filter = null;
}

所有归功于Rick Strahl和this blog post的解决方法。

注意:我在这里添加了一个答案来回答我自己的问题 - IISExpress garbled HTTP 500 error message

答案 2 :(得分:3)

这看起来像是gZip错误解码。

检查您是否在页面上设置了内容长度,然后使用gZip过滤器。如果是,则从代码中删除Content-Length集。

当您发送Content-Length并且稍后压缩它并且iis无法将标题Content-Length更改为新的压缩文件时发生这种情况,并发送错误的大小,然后浏览器读取错误的大小并且无法正确解压缩。

参考:
ASP.NET site sometimes freezing up and/or showing odd text at top of the page while loading, on load balanced servers

更新

其他可能的原因是设置wronge Response.ContentType ,例如将其设置为文本并发送gif图像,或将其设置为图像并发送文本。

更新2

可能错误在内容类型上。设置此标题:

context.Response.ContentType = "application/octet-stream";
context.Response.AppendHeader("Content-disposition", "attachment; filename=" + cFileNameToShowAndDownload);

答案 3 :(得分:1)

我在dotnet core上遇到了类似的问题。 (这个问题现在已经有9年历史了。不要以为这对操作有帮助,但也许其他人会觉得有帮助)。

我得到了类似的乱码文本,看起来像gzip编码。在firefox中禁用压缩(如所选答案)似乎可以验证这一点。仅当尝试使用具有非标准内容(kendo模板)的脚本块渲染部分视图时,才会出现此问题。这与什么时候发生异常无关。

问题归结于配置。我们正在使用破坏响应的第三方库。像Microsoft在https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.2中概述的那样使用压缩解决了该问题(我们停止使用第三方库)。如https://stackoverflow.com/a/54372810/1462295所述,排序在配置压缩和静态文件设置时很重要。

public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // ordering matters here
    app.UseResponseCompression();
    app.UseStaticFiles();
}