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


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

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

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

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

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

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

выход wireshark

Вы можете видеть, что он заменяет еврейскую часть 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 (особенно проверил опцию "всегда показывать закодированные адреса", чтобы увидеть, если это поможет и перезапустить, но не сделал никакой разницы):

Введите описание изображения здесь

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

Мои вопросы:

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

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

Спасибо.

1 18
url

1 ответ:

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

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

Это поведение нигде полностью не задокументировано. Я собирался написать полный пост в своем блоге IEInternals об этом, но в итоге перешел из Microsoft, прежде чем сделать это. Есть частичное объяснение в этой записи в блоге.

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

  1. где был введен URL-адрес (например, адресная строка против Start > Run и т. д.)
  2. какова кодовая страница ANSI системы (например, какой локаль