浏览器如何处理带有片段标识符的 URL

How do browsers handle URLs with a fragment identifier

我 运行 遇到了这样一种情况,我想确定浏览器如何处理包含片段标识符的 URI,例如 Products#A。假设我的网站有两个页面:ProductsFAQs。然后,在每个内部,我想使用 # 导航到特定的 HTML 元素。所以:

  1. 如果我已经在第 Products 页,href="Products#A"href="#A" 有什么区别?
  2. 如果我在页面中 FAQs?
  3. href="Products#A" 中那样放置 URL 是否总是会触发服务器调用,或者浏览器是否知道它已经在页面 Products 上并且不会进行服务器调用?
  4. 什么是我加个/(比如href="/products#A")?这会强制调用服务器吗?
  5. 这个标准适用于所有浏览器吗?

我已经 运行 进行了一些测试,但我在这里缺少一些理论。

为了回答你的问题,我是根据自己的经验来做的。

  1. 如果我已经在第 Products 页,href="Products#A"href="#A" 有什么区别?

    没有。只是为了安全起见,如果您在不同的页面中,并且使用相同的部分(或相同的源)呈现内容,这可能会有所帮助。

  2. 如果我在页面 FAQs?

    它正常导航到 Products 并找到带有 id="A" 的元素并滚动到那里。

  3. href="Products#A" 中那样放置 URL 是否总是触发服务器调用,或者浏览器是否知道它已经在页面上 Products 并且它不进行服务器调用?

    那是一个客户端调用,没有对 URL 片段进行服务器调用。

  4. 这个标准适用于所有浏览器吗?

    我相信。

如果 link(片段除外)解析为与当前页面相同的 URL,则它将在当前页面周围导航。

如果解析到不同的页面,则会加载新页面。

相对(或绝对)URL 的实际表达方式并不重要,重要的是它解析为什么。