Страница отображает случайные символы вместо сообщения об ошибке в 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"?
Ответы
Ответ 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();
}