1.7 URL
URL(Uniform Resource Locator,统一资源定位符)是地址的别名。它包含关于文件存储位置和浏览器应如何处理它的信息。互联网上的每个文件都有唯一的URL。
URL的第一个部分称为模式(scheme)。模式告诉浏览器如何处理需要打开的文件。最常见的模式是HTTP(Hypertext Transfer Protocol,超文本传输协议),用于访问网页,如图1.7.1所示。
图1.7.1 基本的URL包含模式、服务器名称、路径和文件名
URL的第二个部分是文件所在服务器的名称,紧接着是到达这个文件的路径,以及文件自身的名称。有时URL不以文件名结尾,而以一个路径结尾(可以包含一个结尾的斜杠,也可以不包含),如图1.7.2所示。在这种情况下,URL指的是路径中最后一个目录中的默认文件(通常为index.html)。
图1.7.2 以一个斜杠而非文件名结尾的URL指向最后一个目录(在这个例子中是tofu目录)中的默认文件。最常见的默认文件名是index.html。因此,这个URL与上一个例子中的URL指向的是同一个页面
其他常见的模式有https(用于安全网页)、ftp(File Transfer Protocol,文件传输协议,用于下载文件,参见图1.7.3)、mailto(用于发电子邮件,参见图1.7.4)、file(用于访问本地硬盘或本地文件共享网络上的文件,这种模式很少有机会用到,参见图1.7.5)。
图1.7.3 当用户点击这个URL时,浏览器会开始按FTP模式传输文件proposal.pdf
图1.7.4 用于电子邮件地址的URL包括mailto模式,紧接着是一个冒号(没有斜杠),然后是电子邮件地址本身
图1.7.5 使用file模式引用本地Windows机器上的文件。对于Macintosh,应使用file:///Harddisk/path/filename,无需竖线。有时在Windows上也不需要竖线
模式后面通常紧跟一个冒号和两个斜杠。mailto和news是例外,它们后面只有一个冒号。
注意file模式后面跟着一个冒号和三个斜杠。这是因为第二个和第三个斜杠之间代表的主机假定为本地计算机。应始终用小写字母输入模式。
在上述模式中,最常用到的是http和mailto,其他模式则只有在特殊情况下才会用到。
- 绝对URL
URL可以是绝对的,也可以是相对的。绝对URL(absolute URL)显示文件的完整路径,包括模式、服务器名称、完整路径和文件名本身,如图1.7.6所示。绝对URL就像是完整的通信地址,包括国家、州、城市、邮政编码、街道和姓名。无论邮件来自哪里,邮局都能找到收件人。对于URL,这意味着绝对URL本身与被引用文件的实际位置无关,无论是在哪个服务器上的网页中,某一文件的绝对URL都是完全一样的。
图1.7.6 包含URL的文档(在这个例子中是you-are-here.html)是相对URL的参照点。换句话说,相对URL是相对于这个文件在服务器上的位置。绝对URL与其所在的位置无关,因为它们总是包含资源的完整URL
引用别人的服务器上的文件时,总是应该使用绝对URL。对于FTP站点以及几乎所有不使用HTTP协议的URL,都应该使用绝对URL。
表1.7.1描述了访问you-are-here.html中各个文件的方式,作为对相对URL和绝对URL的比较。表中包括这些文件与you-are-here.html在同一站点(site.com)和在另一站点(remote.com)的情况。
文 件 名 | 绝对URL(可以在任何地方使用) | 相对URL(只能在you-are-here.html中使用) |
---|---|---|
index.html | http://www.site.com/about/index.html | index.html |
data.html | http://www.site.com/about/info/data.html | /info/data.html |
image.png | http://www.site.com/img/image.png | ../img/image.png |
news.html | http://www.remote.com/press/news.html | 无,请使用绝对URL |
index.html | http://www.remote.com/sign-up/index.html | 无,请使用绝对URL |
- 相对URL
当我告诉你我邻居家的位置时,我一般不会说完整地址,而是说:“她家在右边第三个门。”这就是相对地址,它指出的位置是以信息提供者的位置为参照的。如果在别的城市按照同样的信息找我的邻居,你永远也找不到。
同样,相对URL以包含URL本身的文件的位置为参照点,描述目标文件的位置。因此,相对URL可以表达像“指向本页面同一目录下的xyz页面”这样的意思。
如果目标文件与当前页面(也就是包含URL的页面)在同一个目录中,那么这个文件的相对URL就只有文件名和扩展名,如图1.7.7所示。如果目标文件在当前目录的子目录中,那么这个文件的相对URL就是子目录名,接着是一个斜杠,然后是文件名和扩展名,如图1.7.8所示。
图1.7.7 相对URL指向同一目录下的文件(参见图1.7.6)。URL中只需要文件名和扩展名,不必在前面加上http://www.site.com/about/(这两个文件所在的目录)
图1.7.8 要引用当前文件夹的子文件夹中的文件(在这个例子中是data.html)(参见图1.7.6),应在文件名之前加上子文件夹名称和一个斜杠
如果要引用文件层次结构中更高层目录中的文件,那么应该使用两个句点和一个斜杠,如图1.7.9所示。可以组合和重复使用两个句点和一个斜杠,引用当前文件所在服务器或硬盘上的任何文件。
图1.7.9 在图1.7.6中可以看到,这个文件位于与网站根目录下的当前文件夹(about)同属一层的文件夹(img)中。在这种情况下,使用两个句点和一个斜杠上升一级,然后指出子目录,再跟一个斜杠,最后是文件名。(实践中,可以为image.png选择一个更具描述性的文件名,这里的名称仅作为示例。)
不过,如果文件位于Web服务器上,应该避免使用像../../img/family/vacation.jpg这样显得较为笨拙的文件路径,不应先直接跳到网站的根目录再顺着向下找到目标文件。可以在最开始使用一个斜杠,这样本例中的根相对URL就是/img/family/vacation.jpg(假定img文件夹位于网站的根文件夹,这也是惯常的用法)。需要强调的是,这种做法只能用于Web服务器上,例如在网站托管服务供应商的Web服务器上,或者在本地计算机运行的Web服务器上(Apache是最流行的Web服务器)。
如果不是在服务器本地开发网站,通常应使用相对URL(当然,除非是指向其他服务器上文件的情况)。这样做会使将页面从本地系统传到服务器变得容易。只要每个文件的相对位置保持不变,就不必修改任何路径,链接依然有效。