假设浏览器遇到这样的链接:
<a href='stackoverflowhome.html'>home</a>
这显然是当前目录中 html 文件的相对 url,但是浏览器如何知道 .html 是文件扩展名,而不是 TLD(顶级域)?它是否有常见文件扩展名列表或 TLD 列表?如果是这样,是否在新文件格式变得常用时手动更新,或者当接受的 TLD 列表发生变化时(例如品牌 TLD)?
假设浏览器遇到这样的链接:
<a href='stackoverflowhome.html'>home</a>
这显然是当前目录中 html 文件的相对 url,但是浏览器如何知道 .html 是文件扩展名,而不是 TLD(顶级域)?它是否有常见文件扩展名列表或 TLD 列表?如果是这样,是否在新文件格式变得常用时手动更新,或者当接受的 TLD 列表发生变化时(例如品牌 TLD)?
这是因为这就是RFC 3986指定应该解析 URI 的方式。如果 URI 没有scheme
(一组字符后跟冒号 - 例如http:
或gopher:
),则必须将其视为相对 URI。引用 RFC:
URI 引用是 URI 或相对引用。如果 URI 引用的前缀与后跟冒号分隔符的方案的语法不匹配,则 URI 引用是相对引用。
允许用户代理对用户的意思做出最好的猜测(参见第 4.5 节),尤其是在上下文不明确的情况下(例如浏览器中的 URL 栏),但 RFC 建议不要在 URI 存在的地方使用它很长一段时间,因为用户代理的最佳猜测会随着时间的推移而改变,从而导致 URI 不会根据访问时间或访问它们的用户代理解析为相同的资源。
相对 URL 绝不是域名。
如果 URL 具有协议,则仅将其解析为包含域名。(或者是协议相关的)。
URL 不以协议说明符开头 - nohttp://
或https://
,因此被解释为相对 URL。