基础背景:
URI:
uri(Uniform Resource Identifier) 是统一资源标识符,就像互联网上的地址一样,在世界范围内唯一标识并定位资源
URL:
url是uri最常见的形式,URL描述了一台特定服务器上某资源的特定位置。
大部分url都遵循一种标准格式:
1、第一部分被称为方案,说明了访问资源所使用的协议类型,例如我们常常看到的 http://、https://
2、第二部分给出了服务器的网络地址,例如 jiayu.lu,或者是127.0.0.1
3、其余部分指定了web服务器上的某个资源
目前,绝大部分uri都是url的形式
其实,url不仅可用在http协议,也可以通过ftp、smtp 等访问,它只是起一个标识资源位置的作用
URL的语法:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
但其实我们最常见的是:
<scheme>://<host>:<port>/<path>?<query>
各字段的含义:
scheme(方案) - 访问服务器以获取资源时所使用的协议
(例如:http/https/ftp/smtp/rstp 等)
user(用户) - 某些方案访问时需要带上用户名
password(密码) - 某些方案访问时需要带上密码
host(主机) - 服务器的主机名或IP地址
(例如:jiayu.lu/127.0.0.1 等)
port(端口) - 服务器正监听的端口号,若为空则使用默认端口,
(http的默认端口为80,https的默认端口为443)
path(路径) - 服务器上资源的本地名称,例如 index.html
params(参数) - 某些方案可能会使用这个字段来指定输入参数,
参数为 名/值 对,url可包含多个参数,它们相互之间用 ; 分隔
query(查询) - 某些方案会用这个字段传递参数,我们在http中常用它传递GET参数
frag(片段) - 一小片资源的名字,但这个字段是在客户端(如浏览器)内部使用的,
在访问时,客户端不会将该字段传给服务器,服务器也不处理该字段。
例如:http://jiayu.lu/tags/Mysql?q=123 ,这里的对应关系如下:
<scheme> - http:
<host> - jiayu.lu
<port> - 80
<path> - tags/Mysql
<query> - q=123
绝对url 和相对url:
绝对url:
所谓绝对url,就是指例如 http://jiayu.lu/mysql?q=123 这类url,客户端可以拿该url直接定位到资源所在
相对url:
所谓相对url,就是指例如 ./html?q=456 ,客户端不能直接拿该url去访问资源,而是需要将其转化为绝对url进行访问。
所谓转化,其实就是相对于其基础url进行解析
所谓基础url,其实就是这个相对url所在文档的路径,
而我们在构建页面时,也可能有以下几种写法:
A:
<a href = "http://jiayu.lu/mysql/html.html">mysql</a>
B:
<a href = "/mysql/html.html">mysql</a>
C:
<a href = "html.html">mysql</a>
例如,我们在http://jiayu.lu/test.html 这个导航页面里包含了以上三个超链接,那么结果会如何呢?
A - 跳转到 http://jiayu.lu/mysql/html.html
B - 跳转到 http://jiayu.lu/mysql/html.html
C - 跳转到 http://jiayu.lu/html.html
如果我们的导航页面在http://www.so.com/test.html 呢?
A - 跳转到 http://jiayu.lu/mysql/html.html
B - 跳转到 http://www.so.com/mysql/html.html
C - 跳转到 http://www.so.com/html.html