为什么IE11会带参数转换我的URL?

Why does IE11 transform my URL with parameters?

我有一个内部网络应用程序,我使用以下 url 调用,其中包含 1 个参数。

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

当我在IE11中输入URL时,变成了下面的

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

它在 Chrome 和 Opera 中工作,Opera 以其原始形式将参数传递给应用程序。有什么想法可以阻止 IE11 转换参数吗?

我正在使用 IE11、Delphi 10.1 Berlin 和 Intraweb 14.0.53。

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

非 ASCII 字符,如 不允许在 URL 中以未编码的形式出现,RFC 3986 (an IRI via RFC 3987 允许,但 HTTP 不允许使用 IRI)。某些 ASCII 字符也保留为分隔符,并且在用于字符数据时不得以未编码的形式出现。

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

网络服务器期望逆向这个过程来获取原始字符——将%HH序列转换为字节,然后将字节进行字符集解码为字符。浏览器和 Web 服务器必须就使用的字符集达成一致。通常使用 UTF-8,但并非总是如此。一些外国服务器可能会使用他们自己的语言环境。

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

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