包含方案但不包含权限(主机名)的URL?

时间:2011-04-06 15:02:30

标签: url https

从URL(通常是主机名)中省略“权限”组件,但是指定方案(通常为http:https:),是否合法(以及良好实践并得到良好支持)?< / p>

例如,这些是有效的网址吗?

  https:login.html   (relative hostname and path)
  https:/auth/login.html   (relative hostname, absolute path)

当然,预期的行为是使用当前的主机名 - 路径(相对)。

(顺便说一下,这假设方案之后的//是权威(主机)组件的一部分,我认为这是正确的解释)

动机是(常见)要求网站的某些页面要通过https和其他来自http进行接收,我们希望使用相对网址而不是绝对网页(在不同环境中进行测试)。

3 个答案:

答案 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记录了另一条规则:

  • 如果省略权限,则路径 不能开始两个斜杠//
  • 如果省略 Authority ,则 Path 无需以/开头

总结:

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