是" @"主机名后的URL中有效的字符?

时间:2014-06-19 10:58:36

标签: url uri

" @"在这种情况下肯定是允许的:

然而,在这些情况下:

他们是否可以'或者应该" @"被编码? 同样,如果它们是“好的”,它是否会使主机部分成为" bar"和" b.com"分别?

我看了一下rfc(http://www.ietf.org/rfc/rfc3986.txt),第45页使用了这个例子:

ftp://cnn.example.com&story=breaking_news@10.0.0.1/top_story.htm

表示" @"意味着" 10.0.0.1"是主持人,但我不确定,因为查询部分没有正确启动(没有"?")。 (然后它提到了#34;攻击"我感到困惑。)

背景:我正在尝试确定Steven Levithan的正则表达式是否正确解析" http://www.foo.com/@bar"因为有一个" bar": http://stevenlevithan.com/demo/parseuri/js/

1 个答案:

答案 0 :(得分:1)

您提到的示例在RFC中用于说明这样的URI如何欺骗人类。在这种情况下,cnn.example.com&story=breaking_news将是URI的用户信息部分,与第一个示例中的user:pass相同。

至于URI本身是否允许@,据我所知是这样。

如果你看第48页和第49页,你会发现(除其他外)以下规则:

URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part     = "//" authority path-abempty / *snip*
authority     = [ userinfo "@" ] host [ ":" port ]
path-abempty  = *( "/" segment )
segment       = *pchar
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

将此应用于http://www.foo.com/@bar,我们发现schemehttpauthority仅包含强制host部分www.foo.comuserinfoport都是可选的)。与此authority组件hier-part一起有一个path-abempty组件,该组件只需一次重复/@barsegmentpchar@bar重复4次组成。因此bar不是主机名。

另一方面,任何给定的浏览器和/或网络服务器遵循RFC的程度都是一个非常不同的问题。

免责声明:我不是专家,自从我查看ABNF以来已经有一段时间了。