一、URL与资源的关系
URL(Unifrom Resource Lokator)统一资源定位符,它用来标识一个位于网络上的唯一资源的位置,以标准的http协议下请求为例:
http:// www.baidu.com /s ?ie=utf-8
http:// 方案组件 ,标识当前的访问时使用何种协议 ,它必须以字母开头,通过“:“”与其余部分分割
www.baidu.com 主机组件,标识指向的主机域名或ip
省略了端口组件,在http写一下默认80端口
/s 资源路径,标识了该资源在指定主机下的访问路径
?ie=utf-8 查询组件,也就是通常讲的查询参数
通过一系列的组件叠加在一起,就能标识出需要请求的资源,然后由服务器做出响应
二、绝对定位和相对定位
绝对定位指的是从方案组件开始,至少拥有方案、主机、端口、路径,组成了一条唯一的指向。绝对定位已经满足了我们请求到唯一资源的需求,那相对定位又是什么呢?或者说,相对定位的用处是什么?
相对定位指的是缺失部分组件,但是可以通过基础URL组合成绝对定位的URL。
通过几个例子列举相对URL的情境:
当前url是 http:// www.baidu.com /zhidao/aaa?query=1234
1. ./bbb
组合为绝对URL后为 http:// www.baidu.com /zhidao/bbb
2. ?query =111
组合为绝对URL后为 http:// www.baidu.com /zhidao/aaa?query=111
3. 空
是的空 就重新访问当前基础路径
4. #
同样是访问当前基础路径
5. /bbb
组合为绝对URL后为 http:// www.baidu.com /bbb
这里只列出了比较常见的情况,通过例子总结下浏览器对相对路径的解析算法:
首先浏览器是按照组件来拆分整个相对路径的,当方案组件和主机组件为空时,将基础URL的方案组件和主机组件拼接给新的URL。
之后检查路径组件,这里分了几种情况:
- 路径组件不为空,检查是否有/引导符,如果有说明这是一个完整的路径组件,直接将相对URL拼接到新URL上
- 路径组件不为空,但包含了 ./ 或 ../等需处理部分,则删除处理部分,按照处理逻辑拼接基础URL和相对URL,然后拼接到新URL上
- 路径组件为空,检查查询组件是否为空,不为空则拼接基础URL路径部分和相对URL查询部分组成新URL
- 路径和查询组件都为空,有分段组件拼接分段组件,没有直接使用基础URL为新URL
基本的解析路径是这几种,这里有个特殊情况就是分段组件,分段组件指的是由#分割的部分,这部分并不会真正的整合到URL中发送给服务器进行资源定位,而是用于浏览器取得服务器响应后根据分段组件跳转到所选定区域,所以相对URL输入#或为空时,请求结果是一致的.