ale*_*440 18 url encoding internet-explorer web-services
我收到客户的请求,他希望能够使用IE10地址栏中的参数键入我的Web服务的查询字符串并获取服务结果.参数包括希伯来语中的字符串,如:
http://mywebsite.com/service.asmx/foo?param1=123¶m2=????????????
Run Code Online (Sandbox Code Playgroud)
在我看来,IE10将不会编码查询字符串参数 - 每个非ASCII字符后面的?mark会变成'3f'字节,虽然它确实编码了前面的内容?标记 - 网址本身.
例如,如果我尝试访问url(参数是虚构的,url不是,并且我与该网站没有任何关联)
http://www.shlomo.co.il/pageshe/sales/???-??????.asp?param=?????
Run Code Online (Sandbox Code Playgroud)
然后在wireshark中查看我发送给服务器的字节,它显示了我

您可以看到它确实用urlencoded字符串替换了URL的希伯来语部分,但用希伯来语参数替换了?????,它们是'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
Run Code Online (Sandbox Code Playgroud)
我在win7/IE10和winXPheb/IE8的机器上试过它.
我的IE设置是(特别检查"始终显示编码的地址选项"以查看它是否有帮助并重新启动,但没有区别):

我试图搜索有关该问题的任何信息,但没有找到太多信息.
我的问题是:
ps当然,如果我正在开发客户端/ web ui,我会简单地对我的查询进行urlencode,但我的客户请求正是将查询粘贴到IE地址栏,这就是为什么我对这种特定行为感兴趣.
谢谢.
Eri*_*Law 19
是的,您对行为的观察是准确的.Internet Explorer 10及更低版本遵循用于编码URL的复杂算法.据称这是在Internet Explorer 11中更新的,但我发现新选项似乎不起作用.
"始终显示编码的地址选项"涉及是否为IDN主机名显示PunyCode,并且不会影响查询字符串.Send UTF-8 URLs主要适用于路径的编码,但它也会影响其他代码路径
在任何地方都没有完整记录该行为.我打算在我的IEInternals博客上写一篇关于它的完整帖子,但最后还是继续从微软转发.这篇博客文章中有部分解释.
是的,有些设置会影响行为." Send UTF-8 URLs工具">"Internet选项">"高级"中的复选框是确定URL发送方式的变量之一,但该选项不会盲目地执行它所暗示的内容(只有UTF-8编码路径,而不是查询字符串).涉及的其他变量包括:
由于这些变量,您无法在Internet Explorer中可靠地使用未正确编码的URL(例如,%-escaped UTF8).
不幸的是,对于Internet Explorer 11(build 11.0.9600.17358,win7-x64)仍然如此
我看到你不能不幸地改变了web服务器.然而,正在开发新服务的人可能会考虑将请求参数更改为路径变量,例如从http://myserver.com/page?τεστ更改为http://myserver.com /τεστ/
| 归档时间: |
|
| 查看次数: |
11807 次 |
| 最近记录: |