" @"在这种情况下肯定是允许的:
然而,在这些情况下:
他们是否可以'或者应该" @"被编码? 同样,如果它们是“好的”,它是否会使主机部分成为" 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/
答案 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
,我们发现scheme
为http
。 authority
仅包含强制host
部分www.foo.com
(userinfo
和port
都是可选的)。与此authority
组件hier-part
一起有一个path-abempty
组件,该组件只需一次重复/@bar
。 segment
由pchar
:@
,b
,a
和r
重复4次组成。因此bar
不是主机名。
另一方面,任何给定的浏览器和/或网络服务器遵循RFC的程度都是一个非常不同的问题。
免责声明:我不是专家,自从我查看ABNF以来已经有一段时间了。