FireFox和Chrome在URL中处理\(反斜杠)的不同行为

Sho*_*waz 11 css url firefox google-chrome backslash

背景

根据我的经验,当我的ubuntu工作站在具有活动目录的域上配置时,为我创建的用户名是根据以下模式.

DOMAIN_NAME \用户名

在linux上使用apache 的userdir扩展将需要在URL中使用用户名才能访问主目录中的public_html.

HTTP://本地主机/〜DOMAIN_NAME \用户名

问题A:

Chrome将URL中的所有反斜杠" \ "字符转换为正斜杠" / ",结果网址变为完全不同,并且始终显示" 未找到"结果.

HTTP://本地主机/〜DOMAIN_NAME/USER_NAME

另一方面, Firefox 不会将斜杠转换为正斜杠,因此Web服务器会向目标目标提供http请求.

Common solution is to encode back slash in %5C.
Run Code Online (Sandbox Code Playgroud)

问题B:

如果我们在CSS @import构造中使用类似的路径(包含\ in path),则通过报告404错误而导致css文件作为HTTP Get Request的导入过程失败,并且404错误中报告的URL错过了\ altogether 的存在.这意味着在从中调用GET请求之前,会从URL中删除\.

这种行为在Firefox和Chrome中很常见.但他们有不寻常的解决方案

Firefox需要转义反斜杠才能在css导入过程中工作.

@import url(" http:// localhost/~domain_name \\ user_name/path/to/css ");

Chrome通常需要编码的反斜杠解决方案.

@import url(" http:// localhost/~domain_name%5Cuser_name/path/to/css ");

  • 在URL中处理\的统一解决方案是什么?
  • 有没有办法避免\出现在用户名中?

Bor*_*sky 9

处理URL中反斜杠的统一解决方案是使用%5C.RFC 2396根本不允许在URL中使用该字符(因此关于该字符的任何行为都只是错误恢复行为).RFC 3986允许它,但没有广泛实现,尤其是因为它与现有的URL处理器不完全兼容.

特别是Chrome,与IE做同样的事情:假设您在键入反斜杠时意味着正斜杠,正如您所发现的那样,因为这就是Windows文件路径所做的事情.

  • 我不认为RFC 3986在URI中改变了裸"\"的状态; 它仍然无效. (2认同)