Страница отображает случайные символы вместо сообщения об ошибке в Firefox - PullRequest
14 голосов
/ 10 ноября 2010

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

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

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

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

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

РЕДАКТИРОВАТЬ: это происходит только в Firefox.IE (8) правильно отображает сообщение об ошибке.

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

EDIT 3: похоже, что это происходит только при падении страницы.

РЕДАКТИРОВАТЬ 4: Хорошо, это происходит только на IIS7 и только когда я получаю ошибку 500. Я думаю, что это могут быть страницы ошибок IIS, которые имеют проблемы.Как я могу попытаться изменить их?

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

Ответ
Cache-Control private
Content-Type text / html;charset = utf-8
сервер Microsoft-IIS / 7.0
X-AspNet-версия 2.0.50727
X-Powered-By ASP.NET
Дата пн, 04 апр. 2011 10:31:24GMT
Content-Length 2284
Запрос
Host 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)
Принять текст / 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
gzip для Accept-Encoding, deflate
Accept-Charset ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Keep-Alive 115
Поддержание соединения
Referer xxxxx
Cookie xxxxxx

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

Ответы [ 3 ]

8 голосов
/ 15 июня 2011

Я не нашел реального решения, но нашел удовлетворительный обходной путь.

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

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

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

  1. Введите about: config в строку URL (принять заявление об отказе)
  2. Введите кодировку в поле фильтра под строкой URL
  3. Дважды щелкните строку «network.http.accept-encoding»
  4. Очистить значение

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

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

7 голосов
/ 25 ноября 2014

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

В вашем Global.asax

VB

Sub Application_Error()
    Response.Filter = Nothing
End Sub

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

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

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

Примечание: я также добавил этот ответ к своемусобственный вопрос здесь - Искаженное IISExpress сообщение об ошибке HTTP 500

3 голосов
/ 10 ноября 2010

Это похоже на декодирование ошибок gZip.

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

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

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

Обновление

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

Обновление 2

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

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