2011-04-06 40 views
4

从URL(通常是主机名)中省略“权限”组件,但指定方案(通常为http:https:)是否合法(以及良好的惯例和良好的支持)?包含该方案但不包含权限(主机名)的URL?

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

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

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

(顺便说一句,这个假设//方案后的权限(主机)组成的一部分,我认为这是正确的旅游解说)

的动机是(普通)的要求,即的一些页面网站将通过https和其他通过http加入,我们希望使用相对URL而不是绝对(在不同的环境中测试)。

回答

3

根据RFC1738,双斜杠//是协议(方案)特定数据的一部分(因此根据本文档它们不是强制性的)。

但3.2.2中的HTTP协议(RFC2616)使双斜杠成为该方案的一部分,所以这是必须的。没有它们的没有有效的HTTP URL。

从RFC2616 3.2.1:在HTTP

的URI可以用绝对形式或表示相对于[...]两个 形式通过以下事实区分该绝对URI总是开始 用方案名称后跟一个冒号。

...所以如果你指定了方案,那么它已经被认为是一个绝对的URI。

+0

在编写简单的URL解析器时,我回顾了几年。如果你有协议,你必须有主机名。请参阅RFC1738的第3.1节。 – tomlogic 2011-04-06 15:27:33

+0

咦?在哪里?我没看到它。 '绝对URI包含正在使用的方案的名称(),后跟一个冒号(“:”),然后是一个字符串(),其解释取决于方案。“' – leonbloy 2011-04-06 15:27:42

+0

@leonbloy这就是我所说的“谁的解释依赖于方案”意味着冒号':'后面的部分由执行协议指定,在我们的例子中是HTTP。而HTTP则是强制性的。 - 我链接了文档并给出了您可以阅读的章节号。 – vbence 2011-04-06 15:31:55

0

阅读一些资料后,我认为相关的参考是RFC1808

在那里,它明确指出,如果指定一个方案名称,则URL被认为是绝对的。

它还评论(5.2),其RFC1630允许使用方案名称一些相对URL,但:

  • 方案名称必须是一样的电流(基地​​),并会被忽略
  • 这种行为只是在旧浏览器中实现
  • 它弃用

总之,上述网址无效。