2013-08-13 5 views
17

Ho ricevuto una richiesta da un cliente che vuole essere in grado di digitare la stringa di query del mio servizio web con parametri nella barra degli indirizzi di IE10 e ottenere i risultati del servizio. I parametri includono stringa in ebraico, come:codifica dei parametri della stringa di query in IE10

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

Sembra a me che che IE10, a differenza di altri (normali) i browser, non sarà codificare i parametri di stringa di query - ogni personaggio non ANSI che va dopo il? il segno verrebbe trasformato in byte '3f', sebbene codifichi ciò che precede il? mark - l'url stesso.

Per esempio, se provo per raggiungere l'url (il parametro è immaginario, URL non è, e non ho alcun collegamento con il sito)

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

e guardare nel wireshark per i byte che invio a il server, mostra mi

wireshark output

è possibile vedere lo fa sostituire la parte ebraica della URL con la stringa urlencoded, ma sostituisce i parametri ebraico con ?????, che sono '3f di.

La stessa stringa in cromo verrebbe codificato nella sua interezza:

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 

ho provato su macchine con win7/IE10 e winXPheb/IE8.

impostazioni

mio IE sono (in particolare controllate l'opzione "indirizzi mostrano sempre codificati" per vedere se aiuta e riavviato, ma fatto alcuna differenza):

enter image description here

ho provato a cercare in giro per qualsiasi info riguardo al problema, ma non ne ha trovato molto.

Le mie domande sono:

  • E 'davvero così, o mi sto perdendo qualcosa?
  • Questo comportamento è documentato ovunque?
  • Ci sono delle impostazioni in IE/Win che abilitano la codifica dei parametri.

p.s. Certo, se stavo sviluppando il client/web ui, avrei semplicemente urlencodato la mia query, ma la mia richiesta da parte del cliente era esattamente quella di incollare la query sulla barra degli indirizzi di IE, ecco perché sono interessato a questo comportamento specifico.

Grazie.

risposta

18

Sì, l'osservazione del comportamento è accurata. Internet Explorer 10 e versioni successive seguono un complicato algoritmo per la codifica dell'URL. Questo è stato presumibilmente aggiornato in Internet Explorer 11, ma ho trovato che la nuova opzione doesn't seem to work.

L'opzione "Mostra sempre indirizzi codificati" riguarda se PunyCode viene visualizzato per nomi host IDN e non ha alcun impatto sulla stringa di query. Send UTF-8 URLs si applica principalmente alla codifica del percorso, sebbene possa interessare anche altre codepath

Il comportamento non è completamente documentato in nessun luogo.Avevo intenzione di scrivere un post completo sul mio blog IEInternals a riguardo, ma alla fine ho deciso di passare da Microsoft prima di farlo. C'è una spiegazione parziale in this blog post.

Sì, ci sono impostazioni che influiscono sul comportamento. La casella di controllo Send UTF-8 URLs all'interno di Strumenti> Opzioni Internet> Avanzate è una delle variabili che determina il modo in cui vengono inviati gli URL, ma l'opzione non esegue ciecamente ciò che implica (solo UTF-8 codifica il percorso, non la stringa di query). Altre variabili in gioco sono:

  1. in cui l'URL è stato digitato (per esempio barra degli indirizzi vs. Start> Esegui, ecc)
  2. Qual ANSI tabella codici del sistema è (per esempio, quello che la locale OS utilizza come impostazione predefinita)
  3. il set di caratteri della pagina attualmente caricata nel browser

Come conseguenza di queste variabili, non è possibile affidabile uso di URL che non sono adeguatamente codificate (ad esempio% UTF8 -escaped) in Internet Explorer.

+0

curato la questione di conseguenza. Ci ho messo il tempo di riavviare, altrimenti segnerei la tua risposta prima :) – alex440

+0

Grande domanda e risposta qui, anche se ho provato Browser IE 10 di Stack e il controllo "Invia URL UTF-8" è apparso per risolvere il problema. Vuoi sapere se fa la cosa giusta adesso? –

5

Purtroppo questo è ancora vero per Internet Explorer 11 (build 11.0.9600.17358, win7-x64)

ho visto che non è possibile modificare, purtroppo, il server web. Tuttavia, coloro che stanno sviluppando nuovi servizi possono prendere in considerazione la possibilità di modificare i parametri di richiesta in variabili di percorso, ad es. da http://myserver.com/page? τεστ in http://myserver.com/τεστ/