从URL(通常是主机名)中省略“权限”组件,但是指定方案(通常为http:
或https:
),是否合法(以及良好实践并得到良好支持)?< / p>
例如,这些是有效的网址吗?
https:login.html (relative hostname and path)
https:/auth/login.html (relative hostname, absolute path)
当然,预期的行为是使用当前的主机名 - 路径(相对)。
(顺便说一下,这假设方案之后的//
是权威(主机)组件的一部分,我认为这是正确的解释)
动机是(常见)要求网站的某些页面要通过https和其他来自http进行接收,我们希望使用相对网址而不是绝对网页(在不同环境中进行测试)。
答案 0 :(得分:4)
根据RFC1738,双斜杠//
是协议(方案)特定数据的一部分(因此根据本文档它们不是强制性的。)
但是3.2.2中的HTTP协议(RFC2616)使得双斜杠成为方案的一部分,所以这是必须的。没有它们的有效HTTP URL。
来自RFC2616 3.2.1:
HTTP中的URI可以用绝对形式或相对来表示[...]两者 表单的区别在于绝对URI始终开始 使用方案名称后跟冒号。
...因此,如果您指定方案,则它已被视为绝对URI。
答案 1 :(得分:0)
在阅读了一些消息来源后,我认为相关的参考文献是RFC1808
明确指出,如果指定了方案名称,则假定URL是绝对的。
它还评论(5.2)RFC1630允许一些具有方案名称的相对URL,但是:
总之,上述网址无效。
答案 2 :(得分:0)
根据RFC 3986:
+.-
//
是权威 所以:
scheme:
//authority
/path
这是
https://stackoverflow.com/auth/login.html
\____/\_________________/\______________/
| | |
scheme authority path
授权是可选的,这意味着以下内容也有效:
https:/auth/login.html
\____/\______________/
| |
scheme path
RFC记录了另一条规则:
//
/
开头总结:
https://stackoverflow.com/auth/login.html (valid)
https:///auth/login.html (invalid; path cannot begin with // when no authority present)
https://auth/login.html (invalid; path cannot begin with // when no authority present)
https:/auth/login.html (valid)
https:auth/login.html (valid)
https:/login.html (valid)
https:login.html (valid)
https:/ (valid)
https: (valid)
https:login.html
:是https:/auth/login.html
是