用户代理如何区分相对URL中的域和文件扩展名?

big*_*ind 3 html url user-agent

假设浏览器遇到如下链接:

<a href='stackoverflowhome.html'>home</a>
Run Code Online (Sandbox Code Playgroud)

这显然是当前目录中html文件的相对URL,但浏览器如何知道.html是文件扩展名,而不是TLD(顶级域名)?它是否包含常见文件扩展名列表或TLD列表?如果是这样,只要新的文件格式变得普遍使用,或者接受的TLD列表发生变化(例如使用品牌tlds),它是否会手动更新?

Sea*_*ira 5

这是因为这就是RFC 3986指定应该解析URI的方式.如果URI没有scheme(一组字符后跟一个冒号 - 例如http:或者gopher:),那么它必须被视为相对URI.引用RFC:

URI引用是URI或相对引用.如果URI-reference的前缀与其冒号分隔符后面的方案的语法不匹配,则URI-reference是相对引用.

用户代理可以最好地猜测用户的意思(参见第4.5节),特别是在上下文不明确的情况下(例如浏览器中的URL条),但RFC建议不要使用URI来实现很长一段时间,因为用户代理的最佳猜测会随着时间的推移而发生变化,从而导致URI无法解析为相同的资源,具体取决于访问它们的时间或访问它们的用户代理.

  • @ sys.stderr - 当我尝试编辑此页面上的任何链接时(使用Chrome的开发人员工具),`stackoverflow.com`被视为相对引用.在您看到此行为的地方使用什么浏览器? (3认同)