4.2.1 URI、URL、URN
1.URI
Web信息分布在Internet的大量服务器上。为使用这些资源,需要对它们进行标识和定位。在3.3节介绍了一种寻址方式:DNS,根据域名查找IP地址从而定位某个主机或设备。但对于资源的寻址,仅定位到设备是不够的,还需要引用到具体的文件、对象等。出于这个目的,TCP/IP定义了统一资源标识符(URI,Uniform Resource Identifier),用于定位和访问基于TCP/IP互联网中的一个特定资源。它以紧凑的字符串形式描述了标识引用一个资源的必要信息。
根据描述资源方式的不同,URI又可以分为URL和统一资源名(URN,Uniform Resource Name)。
2.URL
URL是一种将访问机制与具体的资源位置相结合来引用资源的资源标识符。语法上,URL就是一个文本字符串,最基本的形式包含由冒号分割的两部分,即访问机制:具体资源。其中,访问机制是指访问资源的方法,通常指一个应用层协议,如HTTP或FTP,或资源类型,如file。而具体资源通常指资源的位置。因为不同访问机制需要不同类型的信息来标识一个特定的资源,当读取URL时,访问机制部分将告诉浏览器,如何解释URL余下部分的语法。
尽管有不同的访问机制,但如何引用资源具有相似性,如HTTP和FTP都用域名或IP地址找到特定的设备,然后访问存储在一个层次目录结构中的资源,因此URL具有如下通用语法结构:
访问机制://用户名:密码@主机:端口/路径;参数?查询#分片
其中//后面的各个组件解释如下:
·用户名和密码是登录所需的鉴别信息;
·主机指资源所在主机的域名或IP地址;
·端口是用于标识服务器进程的TCP或UDP端口地址;如果服务器使用的是该协议所对应的保留端口,则端口号可以省略,如HTTP的保留端口号是80,FTP对应21端口,HTTPS对应443端口。
·路径指资源定位路径,通常是访问主机的文件系统的路径,如果此项不填写或仅指定目录,则访问该服务器根目录或指定目录的默认页面;
·参数指访问资源所需的参数,某些协议需要更多的参数以便服务器提供正确的服务,每个参数以参数=数值的形式呈现,使用分号分隔多个参数;
·查询是访问资源时,给服务器传递的一个可选的查询或其他信息,常出现在动态页面的请求中,查询以名字=值的形式出现,使用分隔;
·分片指标识用户感兴趣的资源中的一个特定位置,也叫书签或锚点,常出现在带有章节的长页面中。
下面列举常用的URL语法。
·http://www.bestbook.com:8080/bestbook/booklist.jsp?search=computer
表示通过http方法访问www.bestbook.com这个主机下的bestbook目录中的booklist.jsp程序,端口号8080,search=computer是向服务器传递的查询信息。
·ftp://username:pwd@ftp.bupt.edu.cn/pub/documents/journey.jpg;type=i
表示通过ftp方法获取服务器ftp.bupt.edu.cn内/pub/documents/journey.jpg的文件,可选择的类型参数type用于指示文件类型,i指定获取一个图像文件(二进制),用户名和密码为username和pwd。
·mailto://alice@bupt.edu.cn
表示使用电子邮件协议向alice@bupt.edu.cn发送邮件。
·telnet://bbs.byr.edu.cn
表示使用telnet远程登录bbs.byr.edu.cn,实际使用时用户名和密码通常省略,服务器会提示这个信息。这类URL把远程登录服务标识为一个资源。
·file://主机:url路径
引用特定计算机上的文件,这类URL描述了一个对象的位置,file指资源类型而不是访问方法。
·file:///url路径
主机元素被一组三个斜线替代,表示引用本地主机的文件。
3.URN
URL允许基于资源在Internet上的位置以及访问的方法标识资源。但是资源本身和它的位置并非随时绑定,一旦位置发生改变,通过URL引用资源将会失效。而URN的引入则可以解决该问题。
URN是一种基于描述资源真实身份的资源名来引用资源的资源标识符。它提供了一种唯一命名资源的方法,而不需要指定访问机制或资源的位置。URN由名字空间标识符和资源标识符组成,必须全球唯一,其通用语法如下:
URN:名字空间ID:资源标识符
其中:URN是关键字,名字空间ID表示了该资源隶属的名字空间,资源标识符指定了具体的资源名字,中间用冒号分隔。
引入名字空间是为了避免资源标识命名冲突的问题。同一资源标识符在不同组织、行业背景中有不同的含义,例如,8602362281234这一字符串可以解释为ISBN号,也可以解释为电话号码。为了对具有同一标识符的不同类型资源进行区分,在资源标识符前面加上名字空间,通常使用唯一的字符串表示,实际上标明了该资源从属的资源类型,为用户、程序、设备解释后面标识符提供了上下文环境。例如,URN:isbn:8602362281234,表示了ISBN号为8602362281234的资源。
URL和URN同属URI。两者相比,前者面向访问,给出了访问方法和资源位置,更为具体,而后者更抽象,仅通过资源的名字去标识它。在实际应用中,URL使用更普遍,而要通过URN引用资源还需要将资源的名字转换成资源位置和访问方法的机制,相关技术尚未成熟,因此URN的应用还需假以时日。