2013-08-13 6 views
17

Le client m'a demandé de saisir la chaîne de requête de mon service Web avec les paramètres de la barre d'adresse IE10 et d'obtenir les résultats du service. Les paramètres incluent chaîne en hébreu, comme:codage des paramètres de chaîne de requête dans IE10

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

Il me semble que ce IE10, contrairement aux autres navigateurs (normal), ne sera pas coder les paramètres de chaîne de requête - tous les caractères non-ansi qui va après? mark serait transformé en octet '3f', bien qu'il code pour ce qui se passe avant le? marquer - l'url elle-même.

Par exemple, si je tente d'atteindre l'URL (le paramètre est imaginaire, url n'est pas, et je n'ai aucun lien avec le site)

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

et regarder dans Wireshark pour les octets que j'envoie à le serveur, il me montre

wireshark output

Vous pouvez voir la partie ne se substitue hebrew de l'URL avec la chaîne urlencoded, mais remplace les paramètres hébraïques avec ?????, qui sont « 3f de.

La même chaîne en chrome serait codé dans son intégralité:

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 

Je l'ai essayé sur des machines avec win7/IE10 et winXPheb/IE8.

paramètres Mon IE sont (en particulier vérifié la « option adresses Toujours afficher encodées » pour voir si elle aide et redémarré, mais fait aucune différence):

enter image description here

J'ai essayé de chercher autour pour toute information à propos de la question, mais n'a pas trouvé beaucoup de choses.

Mes questions sont les suivantes:

  • Est-ce bien comme ça, ou suis-je manque quelque chose?
  • Ce comportement est-il documenté quelque part?
  • Existe-t-il des paramètres dans IE/Win qui permettent l'encodage des paramètres?

p.s. Bien sûr, si je développais le client/web ui, j'aurais simplement urlencode ma requête, mais ma demande du client était exactement de coller la requête à la barre d'adresse IE, c'est pourquoi je suis intéressé par ce comportement spécifique.

Merci.

Répondre

18

Oui, votre observation du comportement est exacte. Internet Explorer 10 et ci-dessous suivent un algorithme compliqué pour encoder l'URL. Cela a été prétendument mis à jour dans Internet Explorer 11, mais j'ai trouvé que la nouvelle option doesn't seem to work. L'option "Toujours afficher les adresses codées" indique si PunyCode est affiché pour les noms d'hôte IDN et n'a pas d'impact sur la chaîne de requête. Send UTF-8 URLs s'applique principalement au codage du chemin, bien qu'il puisse également affecter d'autres chemins de code

Le comportement n'est documenté nulle part.J'avais l'intention d'écrire un post complet sur mon blog IEInternals à ce sujet, mais j'ai fini par passer de Microsoft avant de le faire. Il y a une explication partielle dans this blog post.

Oui, certains paramètres affectent le comportement. La case à cocher Send UTF-8 URLs dans Outils> Options Internet> Avancées est l'une des variables qui déterminent l'envoi des URL, mais l'option ne fait pas aveuglément ce qu'elle implique (seule UTF-8 code le chemin, pas la chaîne de requête). D'autres variables impliquées comprennent:

  1. Lorsque l'URL a été saisi (par exemple, la barre d'adresse par rapport à Démarrer> Exécuter, etc.)
  2. Qu'est-ce que la page de code ANSI du système est (par exemple, que soit la langue du système d'exploitation utilise par défaut)
  3. le jeu de caractères de la page actuellement chargée dans le navigateur

en conséquence de ces variables, vous ne pouvez pas fiable utiliser des URL qui ne sont pas correctement encodées (par exemple% encodée UTF8) dans Internet Explorer.

+0

Edité la question en conséquence. Il m'a fallu du temps pour redémarrer, sinon je marquerais votre réponse plus tôt :) – alex440

+0

Bonne question et réponse ici, bien que j'ai essayé IE 10 de Browser Stack et en vérifiant "Envoyer des URL UTF-8" est apparu pour résoudre le problème. Vous vous demandez si elle fait la bonne chose maintenant? –

5

Malheureusement cela est encore vrai pour Internet Explorer 11 (build 11.0.9600.17358, Win7 x64)

j'ai vu que vous ne pouvez pas changer malheureusement le serveur Web. Cependant, ceux qui développent de nouveaux services peuvent envisager de modifier les paramètres de demande en variables de chemin, par ex. de http://myserver.com/page? τεστ dans http://myserver.com/τεστ/

Questions connexes