微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

URI和双斜杠

如何解决URI和双斜杠

java.net.URI.create("localhost:8080/foo")   // Works

java.net.URI.create("127.0.0.1:8080/foo")   // Throws exception

java.net.URI.create("//127.0.0.1:8080/foo") // Works

将主机用作IP地址时,是否需要双斜杠?我浏览了RFC的URI-https://tools.ietf.org/html/rfc3986。但是找不到与此有关的任何东西。

解决方法

java.net.URI.create uses the syntax,如RFC 2396中所述。

java.net.URI.create("localhost:8080/foo")   

这不会产生异常,但是会以您可能不希望的方式解析URI。其方案(不是主机!)设置为localhost,而8080/foo不是端口+路径,而是方案特定的部分 。因此,这实际上不起作用。

java.net.URI.create("//localhost:8080/foo")   

解析不带方案的URL,将其作为 net_path 语法元素(有关详细信息,请参阅RFC 2396)。

以下是RFC 2396的相关语法摘录:

URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

// This is how 'localhost:8080/foo' is parsed:
absoluteURI   = scheme ":" ( hier_part | opaque_part )

relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]

... 

// This is how '//127.0.0.1:8080/foo' is parsed: 
net_path      = "//" authority [ abs_path ]

...

// Scheme must start with a letter,// hence 'localhost' is parsed as a scheme,but '127' isn't: 
scheme        = alpha *( alpha | digit | "+" | "-" | "." )

一种正确的方法是:

java.net.URI.create("http://localhost:8080/foo")   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。