"http://"中的"//"

Vin*_*tin 10 uri protocols

我想知道为什么URI标准的设计者选择在URI //的定义中使用http://.

为什么要这么复杂?为什么不用http:

Sim*_*ser 29

这就是答案(网络的发明者后悔一件小事).

事后看来,Tim Berners-Lee也会删除它.

包括它的原因:

虽然当时的编程惯例是双斜线,但结果并非如此.

  • 具体来说,这是一个更近期的(AFAICT)视频采访,他重复了关于双斜线的相同评论:http://www.dailymotion.com/video/xh57ko_sir-tim-berners-lee-on-the-double-slash-在最网页address_tech (2认同)

Jam*_*ing 10

RFC 2396涵盖了这一点,FWIW.

http://www.ietf.org/rfc/rfc2396.txt

5.2节第7部分中的伪代码特别能最好地回答你的问题,即"//"表示后面的内容是URI的权限部分(因为伪代码也清楚地表明它不是必需的部分)的URI).

if authority is defined then
         append "//" to result
         append authority to result
Run Code Online (Sandbox Code Playgroud)

此外,它在RFC 3986第3节中详细说明了一点.

当权限不存在时,路径不能以两个斜杠字符("//")开头.这些限制导致路径的五个不同的ABNF规则(第3.3节),其中只有一个匹配任何给定的URI引用.

  • @Vincent - 添加了3986参考,更好地解释了它.URI语法支持根本不存在的权限部分(因此,您可以使用像http:foo/bar.html这样的引用,它可能与当前上下文/页面具有相同的权限).现在,由于它不是常用的"功能",正如Simeon指出的那样,TBL可以很好地优化常见情况并删除它们,但它仍然是语法的一个特征,而不是一个bug.:) (3认同)