URIs, URLs, and URNs

URIs, URLs, and URNs
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:[email protected]。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。

URI抽象结构 [scheme:]scheme-specific-part[#fragment]

[scheme:][//authority][path][?query][#fragment]

authority为[user-info@]host[:port]

URI协议规范:RFC3986
http://tools.ietf.org/html/rfc3986

URI协议里能够展示的字符都是ASCII码字符集内的,对应ASCII字符集外的字符,比如中文字符,需要进行编码处理,如果参数中包含URI的保留字符或非安全字符同样也需要进行编码处理。
URI协议的编码规范:%号加字符的UTF-8编码的16进制值,比如”汉”对于的URI编码为:%e6%b1%89
换算过程:“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001,用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

URI要被解析,哪些字符表示分割符,哪些字符表示数据,对于在表示数据的字符串中出现了保留字符,那么这些字符必须在uri被理解之前进行转义,避免不同的浏览器对字符进行转移,比如+,不同浏览器对其理解不一样。

你可能感兴趣的:(URIs, URLs, and URNs)