2013-08-13 4 views
17

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

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

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

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

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

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

wireshark output

Вы можете видеть, что делает заменить еврейскую часть URL с urlencoded строкой, но заменяет Еврейские параметры с ?????, которые «3f-х.

Та же строка в хроме будет закодирован в полном комплекте:

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.

настройки

Моей ИЭ (особенно проверяется опция «Всегда показывать закодированные адреса», чтобы увидеть, если это помогает и перезапущено, но не имеет никакого значения):

enter image description here

Я пытался искать вокруг какой-либо информации о проблеме, но не нашел ее.

Мои вопросы:

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

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

Спасибо.

ответ

18

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

«Всегда показывать закодированный вариант адреса» относится ли показано Punycode для IDN имен хостов, и не влияет на строку запроса. Send UTF-8 URLs в основном относится к кодированию пути, хотя он также может влиять на другие кодировки

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

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

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

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

+0

редактировал вопрос соответственно. Потребовалось время для перезапуска, иначе я бы поставил свой ответ раньше :) – alex440

+0

Отличный вопрос и ответ здесь, хотя я попробовал IE 10 браузера Stack и проверял «Отправить URL UTF-8», чтобы решить проблему. Интересно, правильно ли это сейчас? –

5

К сожалению, это по-прежнему актуально для Internet Explorer 11 (сборка 11.0.9600.17358, Win7-x64)

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

Смежные вопросы