如何强制浏览器不规范化 unicode URL?

How to force browsers not to normalize a unicode URL?

大多数浏览器,例如 Firefox 和 Chrome,在请求它们之前对 URL 进行 Unicode 规范化。比如当chrome或者firefox要打开这个link:

http://fa.wikipedia.org/wiki/سید_محمد_خاتمی

其中包含波斯语 Unicode 字符,他们会自动将此字符串转换为:

http://fa.wikipedia.org/wiki/%D8%B3%DB%8C%D8%AF_%D9%85%D8%AD%D9%85%D8%AF_%D8%AE%D8%A7%D8%AA%D9%85%DB%8C

我想修改我网站中的 hyperlink 以防止浏览器规范化 unicode 字符,这样当用户点击 linke,它的纯(原始)URL是从服务器请求的。

有什么技巧吗?例如。源页面中 javascript 的一小段代码 link 到这样的 URL。

更新: 当我通过编程语言请求 url 时,例如Java 的 HttpURLConnection,它要求原始 URL 并且不使用任何规范化(除了我明确调用 UrlNormalizer.normalize(url))。但是,大多数浏览器和 Linux 的 GET 命令都会进行规范化。

For example, when chrome or firefox want to open this link: http://fa.wikipedia.org/wiki/سید_محمد_خاتمی

这不是有效的 URI。这是一个 IRI。支持 IRI 的 Web 浏览器和其他客户端工具会在幕后为您将其转换为纯 ASCII URI 形式(百分比 UTF-8 编码路径和 Punycode 编码主机名)。

When I request the url by a programming language, e.g. Java's HttpURLConnection, it requests the original URL

HttpURLConnection 不支持 IRI。它无论如何都会尝试按原样发​​送 URI,但它实际上应该以无效为由拒绝它。

I want to modify the hyperlinks in my website in a way to prevent browsers from normalizing unicode characters, such that when a user clicks on a linke, its pure (original) URL is requested from the server.

根据 HTTP 标准,在请求行(RFC7230 绝对路径 -> RFC3986 段)中发送原始非 ASCII 字节是无效的。当出现此类无效请求时,Web 服务器会执行不同的、不可预测的事情。最好始终避免。

无法告诉支持 IRI 的浏览器忽略正确的行为并发送非 ASCII 请求行,但您为什么要这样做?你想在这里做什么?