Сбой обратного вызова ASP.NET для закодированного URL с символами UTF в IE - PullRequest
1 голос
/ 04 января 2010

У меня есть русский блог, созданный с помощью BlogEngine.NET 1.5.

Я использую русские слова в ссылках, закодированных с помощью URLEncode, поэтому ссылки читаются человеком в большинстве браузеров - FF, Chrome, Opera (за исключением IE, но это не настоящая проблема с этим браузером). Эта идея не моя, я позаимствовал ее из Википедии - она ​​использует закодированные URL-адреса на локализованных сайтах.

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

Используя Fiddler, я обнаружил, что IE пытается отправить обратный вызов AJAX с помощью WebForm_DoCallback по неправильному адресу - кажется, что он декодирует URL, получает неправильные символы и запрашивает страницу с этим неправильным адресом с сервера и (конечно) получает 404.

Вот как выглядит некорректный запрос от IE в Fiddler:

POST /ru/post/�������������-�����.aspx HTTP/1.1

Вот как FF делает тот же запрос и получает правильный ответ:

POST /ru/post/%D0%92%D1%81%D1%82%D1%83%D0%BF%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5-%D1%81%D0%BB%D0%BE%D0%B2%D0%BE.aspx HTTP/1.1

Я обновил решение с ASP.NET 2.0 по умолчанию для BE до ASP.NET 3.5, но это ничего не изменило.

Обратите внимание, что в BE были внесены некоторые незначительные изменения, чтобы разрешить правильно закодированные ссылки UTF - по умолчанию он удаляет символ процента из ссылок.

Кто-нибудь может сказать мне, что не так с поведением IE здесь и как это исправить? Почему среда разработки под ASP.NET Development отличается от рабочей машины под IIS6? Почему IE не декодирует ссылку в адресной строке (как другие браузеры), а делает это при выполнении запроса?

1 Ответ

0 голосов
/ 04 января 2010

Эта статья может помочь.

Из статьи, которая объясняет, что делает IE:

Что делают веб-браузеры, если они этого не делают найти любой тип контента, либо в Заголовки http или метатег? Internet Explorer на самом деле что-то довольно интересное: оно пытается угадать, основываясь на частоте в какие различные байты появляются в типичном текст в типичных кодировках различных языки, какой язык и кодировка использовался. Потому что различные старые 8 битовые кодовые страницы, как правило, ставят свои национальные буквы в разных диапазонах между 128 и 255, и потому что каждый человеческий язык имеет другой характерная гистограмма письма использование, это на самом деле имеет шанс рабочий.

Убедитесь, что первый метатег в разделе заголовка веб-страницы содержит следующее:

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...