IE 8 удаляет страницы памяти?

Этот вопрос является побочным эффектом этого вопроса. (Этот вопрос получил обозначение как разрешенное, потому что я поставил на него щедрость, и он автоматически разрешился, но на него никогда не получалось ответа.)

Резюме состоит в следующем: у нас есть сайт ASP.NET. Иногда мы получаем ошибки, когда клиент запрашивает причудливые URL-адреса. Из ресурсов, которые запрашивает клиент, похоже, что есть 4k блок текста, отсутствующий в источнике html.

Простой пример... если у нас есть страница, которая выглядит так:

<a href="myValidLink.aspx">Here some text</a>
a bunch more stuff
...(a large block of text)...
AND NOW MORE STUFF LATER

Клиент может запросить URL-адрес: "myValidLiORE %20STUFF %20LATER".

Он действует так, как будто часть источника html просто не была там... и этот раздел, который отсутствует, кажется, составляет точно 4 Кбайт (4096 байт) в длину (или, по мнению некоторых людей, иногда 1 КБ?).

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

Сначала мы подумали, что это проблема с Webresource.axd, потому что нам там было много чего... но теперь я думаю, что это было прежде всего потому, что мы группировали подобные ошибки вместе, и эти ошибки имели тенденцию возникать, когда коррупция произошла в этой конкретной области. Теперь, когда я смотрю на более широкий круг проблем, я вижу места, где мы получаем очень разные ошибки, которые выглядят так, как будто они вызваны одной и той же проблемой: вырезать кусок.

Мы видели это много с IE 8, и он стал более частым, поскольку IE 8 стал более распространенным. Мы видим это иногда с браузером, который сообщает себя как IE 7... который IE 8 будет делать, если он поместится в "режим совместимости".

Моя теория, на данный момент (которую я пытаюсь найти для тестирования), заключается в том, что веб-сервер правильно отправляет все данные в потоке байтов... и что браузер IE 8, имеет проблему и оставляет некоторые страницы памяти (4k) в некоторых условиях.

Я немного обеспокоен этой теорией, однако, поскольку, по-видимому, некоторые люди сообщали о том, что видели это "время от времени" с IE 6 или FF 3... они, как правило, являются выбросами, и могут быть просто разными проблемами с аналогичными симптомами, но если это действительно то же самое в этих браузерах, это вывело бы мою теорию из воды. Тем не менее, у меня нет лучшей идеи на данный момент.

Еще одна идея, которая у меня была, - это, пожалуй, относительно недавний пакет обновления на сервере, вызывает проблемы с данными, которые обслуживаются клиентам, отбрасывая случайные 4 КБ. Проблема с этой теорией заключается в том, что она не объясняет большой перевес ошибок в IE 8 и отсутствие их в других клиентских браузерах.

Итак, вопросы, которые, надеюсь, в конечном итоге получат ответы:

  • Кто-нибудь еще столкнулся с этим? (может быть, теперь это на вашем радаре?)
  • Можно ли последовательно реплицировать эту проблему?
  • Любые идеи о том, что это такое? Можете ли вы проверить или опровергнуть мою теорию?
  • Есть ли какие-либо исправления или обходные пути?

Ответ 1

** Редактировать 4/1/10: ** Обновление: ошибка 4k теперь исправлена ​​кумулятивным обновлением IE8 от 3/30/2010. blogs.msdn.com/ieinternals/archive/2010/04/01/

Команда Internet Explorer изучает эту проблему.

- = Impact = -

До сих пор мы считаем, что проблема не влияет на опыт конечного пользователя в веб-приложении; единственным отрицательным эффектом являются ложные/искаженные запросы, отправленные механизмом спекулятивной загрузки JavaScript. Когда script действительно нужен парсеру, он будет правильно загружен и использован в это время.

- = = обстоятельства -

Похоже, что ложный запрос возникает только в определенных временных ситуациях, только когда предварительный парсер принудительно перезапускается (например, когда в документе появляется тег META HTTP-EQUIV, содержащий тип Content-Type с директивой CHARSET) и только когда URL-адрес SRC JavaScript охватывает 4096-й байт тела ответа HTTP.

- = Обход = -

В настоящее время мы полагаем, что этот вопрос можно вообще смягчить, объявив CHARSET страницы, используя заголовок HTTP Content-Type, а не указывая его на странице.

Итак, вместо размещения

[META HTTP-EQUIV = "Content-Type" CONTENT = "text/html; charset = utf-8" ]

В своем теге head вместо этого отправьте следующий заголовок ответа HTTP:

Content-Type: text/html; кодировка = UTF-8

Обратите внимание, что спецификация кодировки в HTTP-заголовке приводит к повышению производительности во всех браузерах, поскольку анализаторам браузера не нужно перезапускать синтаксический анализ с самого начала при встрече с объявлением набора символов. Кроме того, использование заголовка HTTP помогает смягчить некоторые векторы атаки XSS.

Ответ 2

http://blogs.msdn.com/ieinternals/archive/2009/07/27/Bugs-in-the-IE8-Lookahead-Downloader.aspx - это текущая публикация по этой проблеме.

Ошибка 4k: В статье говорится: "Объявив CHARSET страницы, используя заголовок HTTP Content-Type, а не указывая его на странице, вы можете удалить одну причину перезапуска парсера". Эрик Лоуренс в электронном письме: "К сожалению, другая известная причина перезапуска парсеров - использование пространств имен XML, которые, по-видимому, используют ваш сайт". Поэтому, если вы используете XHTML, проблема 4K может произойти!

Ответ 3

У нас та же проблема. Я добавляю:

        Response.ContentType = "text/html"
        Response.Charset = "utf-8"

к нашему базовому классу. В ближайшее время я расскажу о результатах.

Ответ 4

FWIW Вот статистика, которую я получил от 1 месяца журналов в LogParser.

12331 hits to ScriptResource & WebResource / 183 errors

Сломанная информация useragent. Кажется, поддерживает только теорию IE8 (плюс пользовательские агенты "режим совместимости" ).

cs-uri-stem           MSIEVersion TridentVersion  COUNT
/WebResource.axd      MSIE+8.0    Trident/4.0     100
/ScriptResource.axd   MSIE+8.0    Trident/4.0     36
/WebResource.axd      MSIE+7.0    Trident/4.0     44
/ScriptResource.axd   MSIE+7.0    Trident/4.0     2
/ScriptResource.axd   NOT IE      NOT Trident     1

Единственная ошибка, не связанная с IE8, не вызывает никаких попыток, исходящих из браузера Firefox/3.5.3 (не привязанного).

У меня нет никаких META HTTP-EQUIV = "Content-Type" на моих страницах. Хотя у меня есть это, чтобы отскакивать от пользователей, не являющихся Javascript.

<noscript>
    <meta http-equiv=Refresh content="0; URL=/ErrorPage.aspx?Error=NoJavascript">
</noscript>