You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带href="./etc"的a标签如何解析?Chrome是否遵循RFC 3986?

相对URL解析差异:浏览器 vs Ruby的原因

核心原因:基础URI(Base URI)的差异

浏览器和Ruby解析结果不同,问题出在相对URL的解析基准——基础URI上:

1. 浏览器的解析逻辑

浏览器解析相对URL时,优先使用页面中<base>标签指定的地址作为基础URI。你提到的spielplan/index.html页面里,大概率存在类似这样的标签:

<base href="/de/">

这个标签会把所有相对URL的解析基准设置为站点的/de/路径,而非当前页面所在的/de/spielplan/目录。所以./produktionen/...会被解析为/de/produktionen/...,和浏览器的跳转结果一致。

2. Ruby的URI.join逻辑

Ruby的URI.join方法只会使用你传入的第一个参数(页面URL)作为基础URI,它不会读取页面中的<base>标签内容。对于https://www.salzburger-landestheater.at/de/spielplan/index.html,它会自动提取其“目录部分”——https://www.salzburger-landestheater.at/de/spielplan/作为基准,所以./produktionen/...会被解析为/de/spielplan/produktionen/...,这就是你得到预期但无效URL的原因。

官方文档依据

  • RFC 3986 第5.1节:明确了基础URI的确定规则,其中提到如果文档中有指定的基础URI(比如HTML的<base>标签),则优先使用该值作为解析基准。
  • HTML规范:<base>标签的作用就是定义页面中所有相对URL的解析基准,浏览器必须遵守这个规则。

验证方法

你可以打开spielplan/index.html页面的开发者工具,查看HTML头部是否存在<base>标签——这就能直接验证上述结论。


内容的提问来源于stack exchange,提问作者dani-sc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:28:10