FireFox 和 Chrome 在 url 中处理 \(反斜杠)的不同行为
Posted
技术标签:
【中文标题】FireFox 和 Chrome 在 url 中处理 \\(反斜杠)的不同行为【英文标题】:Different behaviours of treating \ (backslash) in the url by FireFox and ChromeFireFox 和 Chrome 在 url 中处理 \(反斜杠)的不同行为 【发布时间】:2012-05-13 08:37:29 【问题描述】:背景
根据我的经验,当我的 ubuntu 工作站配置在具有活动目录的域上时,为我创建的用户名是按照以下模式。
域名\用户名
在 linux 上使用 apache 的 userdir 扩展需要在 URL 中使用用户名才能访问主目录中的 public_html。
http://localhost/~domain_name\user_name
问题 A:
Chrome 将 URL 中的所有反斜杠 '\' 字符转换为正斜杠 '/' 并且生成的 url 变成完全不同并且总是结果 未找到。
http://localhost/~domain_name/user_name
另一方面,Firefox 不会将反斜杠转换为正斜杠,因此对预期目标的 http 请求由网络服务器提供。
Common solution is to encode back slash in %5C.
问题 B:
如果我们在 CSS @import 构造中使用类似的路径(路径中包含 \),那么作为 HTTP Get Request 的 css 文件的导入过程将失败,并报告 404 错误,并且在404 错误完全错过了 \ 的存在。这意味着 \ 在调用 GET 请求之前从 URL 中删除。
这种行为在 Firefox 和 Chrome 中很常见。但他们有不同寻常的解决方案
Firefox 需要转义反斜杠才能在 css 导入过程中工作。
@import url("http://localhost/~domain_name\\user_name/path/to/css");
Chrome 像往常一样需要编码反斜杠解决方案。
处理URL中\的统一解决方案是什么? 有没有办法避免 \ 出现在用户名中?@import url("http://localhost/~domain_name%5Cuser_name/path/to/css");
【问题讨论】:
【参考方案1】:处理 URL 中的反斜杠的统一解决方案是使用 %5C。 RFC 2396 根本不允许在 URL 中使用该字符(因此有关该字符的任何行为都只是错误恢复行为)。 RFC 3986 确实允许这样做,但没有得到广泛实施,尤其是因为它与现有的 URL 处理器不完全兼容。
特别是 Chrome,它与 IE 做同样的事情:假设您在任何时候键入反斜杠时都表示正斜杠,正如您所发现的那样,因为这就是 Windows 文件路径的作用。
【讨论】:
你能链接到你的测试用例吗?我刚刚在本地测试了它,它确实似乎工作正常。 我不认为 RFC 3986 改变了 URI 中裸“\”的状态;它仍然无效。 请注意,Firefox 目前存在一个错误,它修改了 URL 栏以创建一个用户友好的 URL,但现在无法复制和粘贴,因为它不再是正确的 URL 编码:bugzilla.mozilla.org/show_bug.cgi?id=1026938【参考方案2】:尝试使用 Firefox 中的 Slashy 插件来帮助您。这里是它的链接。
Slashy
【讨论】:
你刚刚救了我... :) +1 链接结果为 404 插件好像被移除了。我会尝试找到类似的东西 @cowlinator - 插件链接已更新【参考方案3】:此反斜杠自动转换问题已在 Chrome 版本 >= 53.0.2785.116 中修复。
现在反斜杠被正确处理为 %5C。
【讨论】:
我很确定它没有。在 Chrome 62.0.3202.89 中,当在地址栏中输入或在 DevTools 的控制台中使用window.location = "<url>";
时,它仍然会发生。以上是关于FireFox 和 Chrome 在 url 中处理 \(反斜杠)的不同行为的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Chrome 和 Firefox 获取打开页面的 URL?
网站可在 Firefox 和 IE 中运行,但不适用于 Chrome
图标在 Chrome 和 firefox 中显示,但在 IE 中不显示