URL语法
URL语法建立在9部分构成的通用格式:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
方案 访问服务器以获取资源时要使用那种协议
用户 某些方案访问资源时需要的用户名
密码 用户名后面可能包含的密码,中间由冒号(:)分割
主机 资源宿主服务器的主机名或IP地址
端口 资源宿主服务器的正在监听的端口号(Http默认端口号80)
路径 服务器上资源的本地名
参数 指定输入参数,参数为名/值对。URL中可以包含多个参数字段,它们相互之间以及路径的其余部分之间用分号(;)分隔
查询 用这个组件传递参数已激活应用程序(比如数据库、公告板、搜索引擎以及其他因特网网关)。用字符”?“将其与URL的其余部分分隔开来。
片段 一小片 或一部分资源的名字。应用对象时,不会将frag字段 传送给服务器;这个字段是在客户端内部使用,通过字符”#“将其与URL的其余部分分隔开来。
接下来详细说说其中某些部分。
参数
除了服务器正在监听的端口,以及是否能够通过用户名和密码访问资源外,很多协议都还需要更多的信息才能工作。比如像FTP这样的协议,有两种传输模式,二进制和文本形式。为了向应用程序提供它们所需的输入参数,以便正确地与服务器进行交互,URL中有一个参数组件。这个组件就是URL中的键值对列表,它们为应用程序提供了访问资源所需的所有附件信息。比如:ftp://prep.ai.mit.edu/pub/gnu;type=d. 再比如,HTTP URL的路径组件可以分成若干路径段,每段都可以有自己的参数 ,如 http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true.
查询
通过提问题惊醒查询来缩小所请求资源类型范围。比如用下列URL来查询Web数据库网关,看编号 12731的条目是否有货:http://www.joes-hardware.com/inventory-check.cgi?item=12731 问号右边的内容被称为查询组件。
片段
有些资源类型,比如HTML,除了资源级别之外,还可以做进一步的划分。比如,对一个带有章节的大型文本文档来说,资源的URL会指向整个文本文档,但 理想的情况是,能够指定资源中的某个章节。为了引入部分资源或资源的一个片段,URL支持使用片段组件来表示一个资源内部的片段。HTTP服务器通常只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器。浏览器从服务器获得了整个资源之后,会根据片段来显示你感兴趣的那部分资源。
URL快捷方式
相对URL和绝对URL
相对URL
要从相对URL获取访问资源所需的全部信息就必须相对于另一个,被称为其基础的URL进行解析。意义:相对URL为保持一组资源的可移植性提供了一种便捷的方式。如果使用的是相对URL,就可以搬移一组文档的同时,仍然保持链接的有效性,这样就可以实现在其他服务器上提供镜像内容之类的功能。
URL是可移植的,是可安全的,是可供人类阅读的,是完整的。
安全传输意味着URL的传输不能丢失信息。有些协议,比如传输电子邮件的简单邮件协议(Simple Mail Transfer Protocol ,SMTP),所使用的传输方法就会剥去一些特定的字符。为了避开这些问题,URL智能使用一些相对较小的,通用的安全字母表中的字符。有时候人们可能会希望URL中包含除通用的安全字母表之外的二进制数据或字符。因此,需要有一种转义机制,能够将不安全的字符编码为安全字符,再进行传输。
为了避开安全字符集表示法带来的限制,人们设计了一种编码机制,用来在URL中表示各种不安全的字符。这种编码机制就是通过一种转义表示法来表示不安全字符的。这种转义表示法包含一个 百分号(%),后面跟着两个表示字符ASCII码的十六进制数。
在URL中,有几个字符被保留起来,有着特殊的含义。有些字符不在定义的US-ASCII可打印字符集中,还有字符 会与某些因特网网关和协议产生混淆。
应用程序要按照一定规范工作,客户端应用程序在向其他应用程序发送任意URL之前,最好把所有不安全或受限的字符都进行转换。只要对所有不安全字符都进行了编码,这个URL就是可在各应用程序之间共享的规范形式;也就无需操行其他应用程序会被字符的任何特殊含义所迷惑了。URL每个组件都会有自己的安全/不安全字符,哪些字符是安全或者不安全的与方案有关。有一种极端的做法就是对所有字符进行编码,但在实际应用中,有些应用程序可能会假定不对安全字符进行编码,这么做的话可能会产生一些奇怪的破坏性行为。如果对额外的字符进行编码,绕过那些对URL进行模式匹配的应用程序。对安全的URL组件进行编码会使模式匹配程序无法识别它们所要搜索的模式。
对一些方案的认识
https与http唯一的区别在于https使用了SSL,SSL为HTTP连接提供了端到端的加密机制,默认端口为443。
mailto URL 指向邮件地址,示例:mailto:joe@sina.com
ftp 文件传输协议。
rtsp,rtspu 是可以通过实时流传输协议解析音/视频媒体资源的标识符。方案rtspu中的u表示它是使用UDP协议 来获取资源的。
file 表示一台指定主机上可直接访问的文件。
news 用来访问一些特定的文章或新闻组,news URL自身包含的信息不足以对资源进行定位
telnet 用来访问交互式业务,表示的并不是对象自身,而是通过telnet协议访问的交互式应用程序(资源)。
URL并不完美,缺点在于如果资源被移走了,URL也就不再有效了。一种解决方案是: PURL,引入中间层,通过一个中间资源定位符服务器对资源的实际URI进行登记和跟踪。客户端可以向定位符请求一个永久URL,定位符可以以一个资源作为响应,将客户端重定向到资源当前实际的URL上去。