
1.1 URI和URL
1.1.1 URI和URL简介
统一资源标识符(Uniform Resource Identifier,URI),允许用户对网络中的资源通过特定的协议进行交互操作。RFC2396文档对Uniform Resource Identifier各部分的定义如下。
Uniform:规定统一的语法格式,以方便处理多种不同类型的资源,而无须根据上下文环境来识别资源类型。
Resource:可标识的任何资源。资源不仅可以为单一对象,也可以为多个对象的集合体。
Identifier:表示可标识的对象,也称为标识符。
在一般情况下,URI为由某个协议方案表示的资源的定位标识符。协议方案是指访问资源时所使用的协议类型名称。HTTP就是协议方案的一种,除此之外,还有FTP、file、TELNET等30种标准URI协议方案。协议方案由互联网号码分配局(IANA)管理颁布。URI使用字符串标识某一互联网资源,常用的URL作为URI的子集,表示某一互联网资源的地点。
URI的通用语法由5个组件组成:

其中,authority组件可以由以下3个组件组成:

在authority中,userinfo作为登录信息,通常形式为指定用户名和密码,当从服务器获取资源时作为身份认证凭证使用。userinfo为可选项。
服务器地址host在使用绝对路径URI时需指定访问的服务器地址,地址可以为被DNS解析的域名,如example.com,或者192.168.1.1的IPv4地址及用方括号括起来的IPv6地址[0:0:0:0:0:0:0:1]。
port为服务器连接的网络端口号,作为可选项,如果不指定,则自动使用默认的端口号。
在URI语法中,scheme为协议方案名,在使用HTTPS或HTTP等协议方案名时不区分大小写,最后一个符号为冒号“:”。协议方案名也可使用javascript:、data:指定脚本程序或数据。
path为带层次的文件路径,指定服务器上的文件路径,以访问特定的资源。
query为查询字符串,针对指定路径的文件资源,可使用查询字符串传入任意查询参数。
fragment为片段标识符,通常标记已获取资源的子资源,为可选项。
RFC3986文档列举了几种URI示例:

在以上URI示例中,ldap://[2001:db8::7]/c=GB?objectClass?one的schema为ldap,authority为//[2001:db8::7],path为/c=GB,query为?objectClass?one;https://daisy@example.com:123的schema为https,authority为//daisy@example.com:123,其中userinfo为daisy,host为example.com,port为123。
统一资源定位器(UniformResourceLocators,URL)作为URI的一种,如同网络的门牌,标识了一个互联网资源的“住址”,如http://www.example.com表示通过HTTP协议从主机名为www.example.com的主机上获取首页资源。
URL的语法定义与URI一致:

以https://example.com:80/foo/baz?title=router为例,其中https表示加密的超文本传输协议,example.com为服务器的地址,80为服务器上的端口号,/foo/baz为资源路径,?title=router为路径的查询,以“?”开头,各个参数以“&”分隔,以等号“=”分开参数名称与数据。
如无特别说明,本书以URL作为网络资源地址的描述。