encodeuri encoded web-services internet-explorer url encoding

web services - encoded - Codificación de parámetros de cadena de consulta en IE10



url encode c# wpf (3)

Desafortunadamente, esto sigue siendo cierto para Internet Explorer 11 (compilación 11.0.9600.17358, win7-x64)

Vi que lamentablemente no se puede cambiar el servidor web. Sin embargo, aquellos que están desarrollando nuevos servicios pueden considerar cambiar los parámetros de solicitud en variables de ruta, por ejemplo, de http://myserver.com/page ? Τεστ a http://myserver.com / τεστ /

Recibí una solicitud de un cliente de que quiere poder escribir la cadena de consulta de mi servicio web con parámetros en la barra de direcciones de IE10 y obtener los resultados del servicio. Los parámetros incluyen cadena en hebreo, como:

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

Me parece que IE10 no codificará los parámetros de la cadena de consulta, ¿cada carácter no ASCII que va después de? la marca se convertiría en el byte ''3f'', aunque codifica lo que va antes de? marca - la url en sí.

Por ejemplo, si trato de llegar a la URL (el parámetro es ficticio, la URL no lo es y no tengo conexión con el sitio)

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

y busque en los bytes los bytes que envío al servidor, esto me muestra

Puede ver que sustituye la parte hebrea de la URL con la cadena urlencoded, pero sustituye los parámetros hebreos por ?????, que son ''3f''.

La misma cadena en Chrome se codificaría en su totalidad:

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

Lo probé en máquinas con win7 / IE10 y winXPheb / IE8.

Mi configuración de IE es (especialmente verificada en la opción "Mostrar siempre las direcciones codificadas" para ver si ayuda y reiniciar, pero no hizo ninguna diferencia):

Intenté buscar información sobre el problema, pero no encontré mucho.

Mis preguntas son:

  • ¿Es realmente así, o me estoy perdiendo algo?
  • ¿Está este comportamiento documentado en alguna parte?
  • ¿Hay alguna configuración en IE / Win que permita la codificación de los parámetros?

ps. Claro que si estuviera desarrollando el cliente / web ui, simplemente urlencería mi consulta, pero mi solicitud del cliente fue exactamente para pegar la consulta en la barra de direcciones de IE, por eso me interesa este comportamiento específico.

Gracias.


Sí, tu observación del comportamiento es precisa. Internet Explorer 10 e inferior siguen un algoritmo complicado para codificar la URL. Al parecer, esto se actualizó en Internet Explorer 11, pero he descubierto que la nueva opción no parece funcionar .

La opción "Mostrar siempre las direcciones codificadas" se refiere a si PunyCode se muestra para los nombres de host de IDN y no afecta la cadena de consulta. Send UTF-8 URLs aplican principalmente a la codificación de la ruta, aunque también puede afectar a otras rutas de código

El comportamiento no está completamente documentado en ninguna parte. Tenía la intención de escribir una publicación completa en mi blog de IEInternals al respecto, pero terminé pasando de Microsoft antes de hacerlo. Hay una explicación parcial en esta entrada de blog .

Sí, hay configuraciones que impactan el comportamiento. La casilla de verificación Send UTF-8 URLs dentro de Herramientas> Opciones de Internet> Avanzadas es una de las variables que determina cómo se envían las URL, pero la opción no hace ciegamente lo que implica (solo UTF-8 codifica la ruta, no la cadena de consulta ). Otras variables involucradas incluyen:

  1. Dónde se escribió la URL (por ejemplo, barra de direcciones vs. Inicio> Ejecutar, etc.)
  2. Cuál es la página de códigos ANSI del sistema (por ejemplo, qué configuración regional utiliza el sistema operativo como predeterminado)
  3. El conjunto de caracteres de la página actualmente cargada en el navegador.

Como consecuencia de estas variables, no puede usar de manera confiable las URL que no están codificadas correctamente (por ejemplo,% -escaped UTF8) en Internet Explorer.