http - 如何解释 Firefox 和 Safari 对用户提供的包含多个 # 符号的 URI 的不同处理方式?哪个是 'right' ?

标签 http firefox browser safari

在 Firefox 4.0.1 中将以下内容粘贴到地址栏

http://www.w3.org/#one#two

请注意,浏览器导航到 w3.org 的首页,地址栏仍然显示

http://www.w3.org/#one#two

在 Safari 5.0.4 中执行相同的操作。注意浏览器也导航,但是地址栏文本被修改为阅读

http://www.w3.org/#one%23two

请注意,字符串中 hash 的第一个 hash 外观没有改变,但第二个被修改为编码形式(又名“转义”)%23。

假设 Safari 正在尝试将用户提供的 URI 转换为符合其有效 URI 想法的链接似乎是合理的。在这种情况下,Firefox 不会进行转换。

我想解释行为上的差异。

文档位于 http://www.ecma-international.org/publications/standards/Ecma-262.htm是对有效 URI 采用何种形式的引用。在第 15.1.3.1 节中,它陈述了以下关于浏览器对 URI 的转义的内容。

The character “#” is not decoded from escape sequences even though it is not a reserved URI character.

这可能意味着它指的是整个 URI 字符串中的 # 符号,而不仅仅是第一次出现。

总而言之,我的问题是:

  • 这两种形式的链接是否都符合有效 URI 的最新标准?
  • 如果它们都有效,哪种浏览器行为最合适?

最佳答案

RfC 3986 (URI 和 URL 的定义以及各部分的含义)不允许在一个 URL 中使用两个 # 字符,至少在我看来是这样。这使得问题归结为:

  • 将用户错误转发给 Web 应用程序(设计者可能犯了同样的错误)是否更好,
  • 还是将用户输入转换为密切相关但有效的内容更好?

另请注意,RfC 明确将 # 列为保留字符,因此 ECMA 标准在您上面引用的内容中是错误的。

关于http - 如何解释 Firefox 和 Safari 对用户提供的包含多个 # 符号的 URI 的不同处理方式?哪个是 'right' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897002/

相关文章:

javascript - 不在 RequireJS 环境中时全局公开 AMD 模块

ruby-on-rails - Ruby on Rails 中带有 http.request 的 EOFError(到达文件末尾)

http - 500 Internal Server Error 是否总是意味着网络服务器错误?

css - Firefox 不会立即呈现样式表?

javascript - 移动浏览器关闭浏览器时不触发 `beforeunload`/`onload`

windows - 从浏览器在客户端运行命令

javascript - 由于错误,动态 jQuery 输入刷新页面

java - 限制 Spring、tomcat 中 http application/json 请求体的大小

node.js - 我是否将 nginx proxy_pass 指向 Node HTTPS 服务器的 HTTP 或 HTTPS?

firefox - 在其他应用程序中使用 'firefox location bar' 搜索