为什么IE11使用参数转换我的URL?

时间:2016-05-18 15:26:14

标签: delphi internet-explorer-11 intraweb delphi-10.1-berlin

我有一个intraweb应用程序,我使用以下url调用,包含1个参数。

http://127.0.0.1:8888/?0001=„V‡&

当我在IE11中输入网址时,它会转换为以下内容。

http://127.0.0.1:8888/$/?0001=%EF%BF%BD%EF%BF%BDV%EF%BF%BD

它适用于Chrome和Opera,它将参数的原始形式传递给应用程序。任何想法如何阻止IE11转换参数?

我使用IE11,Delphi 10.1 Berlin和Intraweb 14.0.53。

问候,彼得

2 个答案:

答案 0 :(得分:1)

根据这篇文章,编码查询字符串似乎是唯一的答案。

RFC 1738

答案 1 :(得分:1)

等非ASCII字符不允许在网址中按照RFC 3986(通过RFC 3987允许的IRI)进行解码。 HTTP不使用IRI)。某些ASCII字符也保留为分隔符,用于字符数据时不得出现未编码。

IE正在做正确的事情。在传输URL之前,受限字符必须是charset编码为字节(IE使用UTF-8,URL无法指定所使用的字符集),然后字节必须在%HH中进行百分比编码格式。

Web服务器应该反转此过程以获取原始字符 - 将%HH序列转换为字节,然后将字节charset-解码为字符。浏览器和Web服务器必须就使用的字符集达成一致。通常使用UTF-8,但并非总是如此。一些外国服务器可能会使用自己的语言环境。

这是URL和HTTP规范的一部分。所有Web服务器都需要识别和解码百分比编码序列。

Chrome和Opera应该在IE正在做的网络层做同样的事情,即使他们没有更新他们的UI来反映它。您可以使用数据包嗅探器(如WirksharkFiddler)来确切验证每个浏览器实际传输到Web服务器的内容。