Подтвердить что ты не робот

Страница отображает случайные символы вместо сообщения об ошибке в Firefox.

Случайно, на нескольких проектах некоторые страницы отображают случайные символы вместо сообщения об ошибке. Как этот:

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

Это происходит довольно случайным образом и, по-видимому, вызвано различными факторами. Здесь он загружается в файл.

Мы используем SharpZipLib на этой странице, но код не должен его использовать.

Кто-нибудь знает, почему это происходит, и как его предотвратить?

EDIT: это происходит только в Firefox. IE (8) отображает сообщение об ошибке правильно.

РЕДАКТИРОВАТЬ 2:, похоже, происходит довольно случайно, только на некоторых страницах/сайтах. Такая же страница на другом сайте IIS работает хорошо. Кажется, это делается только на IIS7; У меня нет сообщений о тех, кто работает на IIS6, и я не встречал его на своей машине dev.

РЕДАКТИРОВАТЬ 3: похоже, что это происходит только при сбое страницы.

EDIT 4: Хорошо, так что это происходит только на IIS7, и только когда я получаю ошибку 500. Я думаю, что это могут быть страницы ошибок IIS, которые имеют проблему. Как я могу попытаться изменить их?

Firebug дает мне те заголовки:


Response Cache-Control

Content-Type text/html; кодировка = UTF-8
Сервер Microsoft-IIS/7.0
X-AspNet-версия 2.0.50727
X-Powered-By ASP.NET
Дата Пн, 04 Апр 2011 10:31:24 GMT
Content-Length 2284
Запрос
Хост xxxx
User-Agent 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)
Принять текст /html, application/xhtml + xml, application/xml; q = 0.9,/; q = 0.8
Accept-Language fr, fr-fr; q = 0,8, en-us; q = 0,5, en; q = 0,3
Accept-Encoding gzip, deflate
Accept-Charset ISO-8859-1, utf-8; q = 0.7, *; q = 0.7
Keep-Alive 115
Поддержка подключения Referer xxxxx
Cookie xxxxxx

Можно ли мне сказать "на этой странице, я вообще не принимаю сжатие gzip"?

4b9b3361

Ответ 1

Я не нашел никакого реального решения, но нашел удовлетворительное решение.

Имейте в виду, что проблема возникает только при таких условиях:

  • Веб-сайт настроен на IIS7/Windows Server 2008.
  • Страница, отображающая символы мусора, на самом деле разбилась. В результате "мусор" является, по сути, gzip-сжатым сообщением об ошибке, которое не было распаковано, или что-то в этом роде.
  • Отключение сжатия gzip на любом динамическом или статическом содержимом ничего не меняет

Обходной путь прост: отказаться от gzip-сжатого содержимого в браузере. В Firefox, как показано в http://forgetmenotes.blogspot.com/2009/05/how-to-disable-gzip-compression-in.html:

  • Введите примерно: config в строке URL (Примите отказ)
  • Введите кодировку в поле фильтра под строкой URL
  • Дважды щелкните строку "network.http.accept-encoding"
  • Пустое значение

На моем веб-сайте он сделал некоторые странные вещи с CSS (и StackOverflow не имеет никакого CSS вообще после этого), но по крайней мере он правильно показал мне сообщение об ошибке, которое позволило мне исправить ошибку.

Надеюсь, это поможет кому-то.

Ответ 2

Другим обходным решением для тех, кто наткнулся на это, может быть удаление фильтра ответов на ошибку приложения, которая избавится от кодировки и отправит ее без сжатия. Поскольку это только для сообщений об ошибках, влияние на производительность должно быть минимальным.

В вашем Global.asax

В. Б.

Sub Application_Error()
    Response.Filter = Nothing
End Sub

С# (я предполагаю, что это правильно, см. ссылку в блоге ниже)

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

Весь кредит Рику Страллу с этот пост в блоге для обхода.

Примечание. Я также добавил, что это ответ на мой собственный вопрос здесь - Сообщение об ошибке IHExpress об ошибке HTTP 500

Ответ 3

Это выглядит как декодирование ошибок gZip.

Убедитесь, что вы настроили Content-Length на своих страницах, а затем используйте gZip-фильтр. Если да, то удалите Content-Length из вашего кода.

Это может произойти, когда вы отправляете Content-Length, а затем сжимаете его, и iis не может изменить заголовок Content-Length на новый сжатый и отправить неправильный размер, тогда браузер читает неправильный размер и не сможет его правильно исправить.

ссылка:
Сайт ASP.NET иногда замерзает и/или показывает нечетный текст в верхней части страницы при загрузке на серверах с балансировкой нагрузки

Update

Другой возможной причиной является установка wronge Response.ContentType, например, чтобы установить его как текст, и вы отправляете изображение gif или устанавливаете его как изображение и отправляете текст.

Обновление 2

Возможно, ошибка указана в типе содержимого. Задайте следующие заголовки:

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

Ответ 4

Я столкнулся с аналогичной проблемой с ядром dotnet. (Этот вопрос сейчас подходит к 9 годам. Не думаю, что это поможет, но, возможно, другие люди сочтут это полезным).

Я получал похожий искаженный текст, он выглядел как кодировка gzip. Отключение сжатия в Firefox подобно выбранному ответу, похоже, подтверждает это. Проблема обнаружилась только при попытке визуализации частичного представления с помощью блока скрипта с нестандартным содержимым (шаблон кендо). Это не было связано с тем, когда происходило исключение или нет.

Проблема сводилась к конфигурации. Мы использовали стороннюю библиотеку, которая ломала ответ. Использование сжатия в качестве контуров Microsoft на https://docs.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.2 устранило проблему (мы перестали использовать стороннюю библиотеку lib). Как упоминалось в fooobar.com/info/15853783/..., порядок имеет значение при настройке сжатия и настройки статического файла.

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();
}