【问题标题】:Why does IE11 transform my URL with parameters?为什么 IE11 会用参数转换我的 URL?
【发布时间】:2016-05-18 15:26:14
【问题描述】:

我有一个使用以下 url 调用的 Intraweb 应用程序,其中包含 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。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您的回复。我们将检查 IIS。然而,在独立的 Intraweb 应用程序中,它是否应该不解码百分比编码的序列,因为它充当网络服务器?
    • 是的,应该是对url进行解码
    【解决方案2】:

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

    Internet Explorer having problems with special chars in querystrings

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2013-09-11
      • 2019-12-05
      相关资源
      最近更新 更多