1.2.2 统一资源定位符
统一资源定位符(Uniform Resource Locator),即通常所说的URL,代表网络上一个特定的资源。URL作为URI的子集,一个URL就是一个URI,用于标识并定位资源。
对于HTTP而言,当用户在浏览器中输入了一个URL后,意味着他想要获取或查看一些资源。在互联网上,有无穷尽的、各种格式的资源,包括图片、HTML页面、XML、视频、音频、可执行文件和Word文档等,通过URL才能在无数的资源中准确地定位或找到要查看的资源。每一个URL都代表一个不同的资源,因此,要访问HTTP资源,就需要使用URL。例如,当用户想要查看某个公司的网站首页时,就需要在浏览器中输入http://www.….com网址,如果要查看该公司的Logo,则需要输入http://www.….com/images/logo.png网址来获取代表此公司Logo的图片。浏览器会根据用户输入的URL向相应的服务器发送HTTP请求,而服务器会最终将对应的资源返回给客户端,并由浏览器处理后呈现。
对于一个URL,如http://www.….com/images/logo.png,它由以下几个部分组成。
http://,这一部分是URL协议,URL协议指明了如何访问一个特定的资源,如上例中的http://会告诉浏览器要使用HTTP协议,即超文本传输协议;除了http://外,较为常见的协议还有https://(加密的HTTP协议)、ftp://(文件传输协议)和mailto:(电子邮件协议)等。
www.….com,这一部分是主机名,主机名会告诉浏览器要访问的资源所在的服务器名称。DNS(Domain Name System)服务器会将这个名称解析为一个具体的IP地址,通过这个IP地址可以找到资源所在的计算机。
/images/logo.png,这一部分是URL路径(Path),它指向服务器上具体的资源。根据要获取资源的不同,其值也会不同,可以说,这一部分的变化性最大。它有可能是在服务器的一个真实存在的文件,比如这里的/images/logo.png,也有可能是由常见的Web框架生成的动态资源,如http://www.….com/account/index。通常情况下,当访问某个网页资源时,浏览器会下载其他与此相关的资源,例如http://www.….com这个网页,它不仅包括文本信息,也包括图片、JavaScript文件、CSS以及其他资源,所有这些资源构成了我们在浏览器中看到的页面。
除了上述3个主要部分外,URL还常常包括以下几个可选部分。
端口号,在主机名后面,以冒号隔开,这一部分通常省略。服务器在这个端口上监听HTTP请求,因此在请求的URL中必须指定相同的端口。HTTP协议默认使用80端口,如果URL中省略了端口号,则默认使用此端口;如果HTTP服务器并没有在80端口监听,而使用了其他端口,则需要在URL中指定端口号,如http://www.…. com:8080,但这种情况比较少见,通常在开发或调试Web应用时才会使用其他 端口。
查询字符串,URL中“?”后面的参数部分,对于http://www.….com/search?q=hello这样一个URL,“q=hello”即为查询字符串,其中“q”是参数名,“hello”是参数值,参数名和参数值用“=”分隔。如果要传递多个参数,则使用“&”来分隔,如name1=value1&name2=value2。查询的字符串会发送给HTTP服务器,并由服务器上的Web应用程序决定如何处理这一部分的内容。
锚部分,也称片段(Fragment),即在“#”后面的内容,它用于指明一个资源的特定位置,例如,http://www.….com/index.html#contact,该URL将定位到HTML页面中指定的元素。这一部分内容与上述其他部分都不一样,它不会由服务器处理,只会由浏览器来处理,也就是说,若更改这一部分的内容,并不会向服务器再次发起请求,浏览器就会定位到当前资源的不同位置。
由此可见,一个完整的URL形式如下所示。
<protocol>://<host>[:port]/[path][?query][#fragment]