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

Ali*_*Ali 2 javascript browser unicode url

大多数浏览器(例如Firefox和Chrome)在请求URL之前对URL进行Unicode规范化.例如,当chrome或firefox想要打开此链接时:

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

我想修改我网站中的超链接,以防止浏览器规范化unicode字符,这样当用户点击linke时,就会从服务器请求其纯(原始)URL.

这有什么诀窍吗?例如,源页面中的小javascript代码链接到此类URL.

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

bob*_*nce 5

例如,当chrome或firefox想要打开此链接时:http://fa.wikipedia.org/wiki/سید_محمد_خاتمی

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

当我通过编程语言(例如Java的HttpURLConnection)请求url时,它会请求原始URL

HttpURLConnection不支持IRI.它试图按原样发送URI,但它应该真的因为无效而拒绝它.

我想修改我网站中的超链接,以防止浏览器规范化unicode字符,这样当用户点击linke时,就会从服务器请求其纯(原始)URL.

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

没有办法告诉IRI感知的浏览器忽略正确的行为并发送非ASCII请求行,但你为什么要这样做?你想在这做什么?