Javascript 如何强制浏览器不规范unicode URL?
大多数浏览器,如Firefox和Chrome,在请求URL之前都会对URL进行Unicode规范化。例如,当chrome或firefox想要打开此链接时:Javascript 如何强制浏览器不规范unicode URL?,javascript,url,browser,unicode,Javascript,Url,Browser,Unicode,大多数浏览器,如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 我想修改我
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字符,这样当用户单击链接时,服务器会请求其纯(原始)URL
有什么诀窍吗?例如,源页面中链接到此类URL的小javascript代码
更新:当我通过编程语言请求url时,例如Java的HttpURLConnection
,它请求原始url,并且不使用任何规范化(除非我显式调用UrlNormalizer.normalize(url)
)。然而,大多数浏览器和Linux的GET命令都进行了规范化
例如,当chrome或firefox想要打开此链接时:
这不是一个有效的URI。这是一个很好的例子。支持IRI的Web浏览器和其他客户端工具将在幕后为您将其转换为仅ASCII的URI形式(百分比UTF-8编码路径和Punycode编码主机名)
当我通过编程语言(例如Java的HttpURLConnection)请求url时,它会请求原始url
HttpURLConnection不支持IRI。无论如何,它都会尝试按原样发送URI,但它确实应该因为URI无效而拒绝它
我想修改我网站中的超链接,以防止浏览器规范化unicode字符,这样当用户单击链接时,服务器会请求其纯(原始)URL
根据HTTP标准,在请求行(RFC7230绝对路径->RFC3986段)中发送原始非ASCII字节无效。当出现这种无效请求时,Web服务器会执行不同的、不可预测的操作。任何时候都最好避免这种情况
没有办法告诉支持IRI的浏览器忽略正确的行为并发送非ASCII请求行,但为什么要这样做呢?您想在这里做什么?HTTP协议允许这样做吗?我假设这是后端的东西虽然支持UTF-8,但它们必须使用百分比编码在线路上进行编码。这正是您的浏览器所做的。当我通过编程语言(例如Java的HttpURLConnection)请求url时,它请求原始url,并且不使用任何规范化(除非我显式地调用UrlNormalizer.normalize(url))。然而,大多数浏览器和Linux的GET命令都进行了规范化。显然,这不是后端的问题。不过,有些浏览器允许这样做。