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

Кодирование параметров строки запроса в IE10

Я получил запрос от клиента о том, что он хочет ввести строку запроса моей веб-службы с параметрами в адресной строке IE10 и получить результаты обслуживания. Параметры включают строку на иврите, например:

http://mywebsite.com/service.asmx/foo?param1=123&param2=מחרוזתבעברית

Мне кажется, что IE10, в отличие от других (обычных) браузеров, не будет кодировать параметры строки запроса - каждый неанси-символ, который идет после? метка будет обращена к байту 3f, хотя он кодирует то, что идет до? mark - сам URL.

Например, если я пытаюсь достичь url (параметр мнимый, url нет, и у меня нет связи с сайтом)

http://www.shlomo.co.il/pageshe/sales/רכב-למכירה.asp?param=פאראם 

и посмотрите в wirehark для байтов, которые я отправляю на сервер, он показывает мне

wireshark output

Вы можете видеть, что он заменяет ивритную часть URL с помощью строки с urlencoded, но заменяет ивритские параметры с символами "3f".

Эта же строка в chrome будет закодирована в ней целиком:

GET http://www.shlomo.co.il/pageshe/sales/%D7%A8%D7%9B%D7%91-%D7%9C%D7%9E%D7%9B%D7%99%D7%A8%D7%94.asp?param=%D7%A4%D7%90%D7%A8%D7%90%D7%9D HTTP/1.1

Я попробовал это на машинах с win7/IE10 и winXPheb/IE8.

Мои настройки IE (особенно проверены параметр "Всегда показывать кодированные адреса", чтобы узнать, помогает ли он и перезагрузился, но не имеет значения):

enter image description here

Я попытался найти информацию о проблеме, но не нашел ее.

Мои вопросы:

  • Действительно ли это так, или я что-то упускаю?
  • Является ли это поведение документированным где угодно?
  • Существуют ли какие-либо настройки в IE/Win, которые разрешают кодирование параметров.

p.s. Конечно, если бы я разрабатывал client/web ui, я бы просто urlencode мой запрос, но мой запрос от клиента был точно, чтобы вставить запрос в адресную строку IE, поэтому меня интересует это конкретное поведение.

Спасибо.

4b9b3361

Ответ 1

Да, ваше наблюдение за поведением является точным. Internet Explorer 10 и ниже следуют сложному алгоритму кодирования URL-адреса. Это, как утверждается, было обновлено в Internet Explorer 11, но я обнаружил, что новый параметр не работает.

Параметр "Всегда показывать кодированные адреса" относится к тому, отображается ли PunyCode для имен узлов IDN и не влияет на строку запроса. Send UTF-8 URLs в основном применяется к кодировке пути, хотя он также может влиять на другие кодеки

Поведение не полностью документировано нигде. Я хотел написать полную запись в своем блоге IEInternals об этом, но в итоге перешел от Microsoft до этого. Там частичное объяснение в этом сообщении в блоге.

Да, есть настройки, которые влияют на поведение. Флажок Send UTF-8 URLs внутри "Инструменты" > "Свойства обозревателя" > "Дополнительно" - это одна из переменных, которая определяет, как отправляются URL-адреса, но опция не слепо делает то, что она подразумевает (только UTF-8 кодирует путь, а не строку запроса). Другие переменные включают:

  • В случае ввода URL-адреса (например, адресная строка или "Пуск" > "Выполнить" и т.д.)
  • Что такое системная кодовая страница ANSI (например, какой язык используется ОС по умолчанию)
  • Кодовая страница загруженной страницы в браузере

Как следствие этих переменных, вы не можете надежно использовать URL-адреса, которые неправильно кодируются (например,% -escaped UTF8) в Internet Explorer.

Ответ 2

К сожалению, это все еще верно для Internet Explorer 11 (сборка 11.0.9600.17358, win7-x64)

Я видел, что вы не можете, к сожалению, изменить веб-сервер. Однако те, кто разрабатывает новые службы, могут рассмотреть возможность изменения параметров запроса в переменных пути, например. от http://myserver.com/page? τεστ в http://myserver.com/τεστ/