不管是在工作还是面试中,Http这一块的知识,对于每个前端开发都是必备的。这篇笔记,是个人在学习 图解Http 这本书的时候,记录一些平时工作面试中,用得比较多的知识点,拿出来和大家分享一下。所有图片取材都源于 图解 Http,文章仅供个人学习使用。
一. 网络基础
1.1 TCP/IP 协议族
计算机与网络设备要相互通信,双方就必须基于相同的方法。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。 像这样把与互联网相关联的协议集合起来总称为TCP/IP。也有说法认为,TCP/IP是指TCP和IP这两种协议。还有一种说法认为,TCP/IP是在IP协议的通信过程中,使用到的协议族的统称。
1.2 TCP/IP 的分层管理
- 应用层:直接跟用户接触,向用户提供应用服务
- Http协议,DNS域解析
- 传输层:TCP,UDP 提供两台计算机之间的传输
- TCP或者UDP
- 网络层:在众多的选项内选择一条传输路线
- IP
- 链路层:用来处理连接网络的硬件部分
1.3 TCP/IP 通信传输流
- 利用TCP/IP 协议族进行网络通信时,会通过分层顺序与对方通信。
- 发送端在层与层之间传输数据时,每经过一层,必定会打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,没经过一层会把对应的首部消去
1.4 TCP 的三次握手
三次握手是由发送端发起的,在发送数据之前,发送端会给接收端发送一个确认消息,当接收端接到发送端的消息并且做出回应之后,发送端才会开始数据的传输
1.5 DNS 域解析
DNS(Domain Name System) 服务是和 HTTP 协议一样位于应用层的协议,它提供域名到 IP 之间的解析服务
1.6 HTTP协议通信流程
1.7 URL/URI
URI(Uniform Resource Iden-tifier):统一资源定位符,标识某一互联网上面的资源
URL(Uniform Resource Locator): 统一资源地址,标识资源的位置
- URI格式
二. HTTP协议
2.1 HTTP的作用
HTTP协议和 TCP/IP 协议族内的其它众多协议相同,用于客户端和服务器之间的通信
请求访问的一端称为客户端,提供资源响应的一端称为服务端
2.2 无状态协议
http 是一种不保存状态,即无状态的协议
在调用过程中,对请求和响应都不做持久化处理
优点:
- 更快的处理大量事物
- 确保协议的可伸缩性
缺点:
- 某些请求或者登陆状态需要保持状态
2.3 Http的请求方法
GET : 主要用来获取资源,参数包含在URL中可见,所以安全性比较差,浏览器对GET方法的参数长度有限制
POST :主要用来获取和传输资源,参数包含在请求体中,且参数长度比GET大的多,对外不可见,相对较为安全,
PUT :向服务器提交数据,更新服务器资源
DELETE :删除服务器数据
HEAD :获取报文首部
2.4 持久化连接
问题: 在 Http 最初的版本中,没进行一次 Http 通信都会断开一次连接,因此当请求过多的时候,都会造成无谓的通信开销
解决: Http/1.1 提出了持久连接的概念
持久连接: 持久连接的特点是,只要任意一方没有明确提出断开连接,就保持TCP连接状态
优点: 持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了
2.5 Cookie
前面说过,Http是无状态的
- 没有Cookie状态下的请求
- 第2次以后(有了Cookie)请求
- 报文说明
三. HTTP报文
Http 包含请求报文和响应报文,通过依赖这两种报文来达到信息的资源的请求和响应
3.1 请求报文和响应报文的结构
请求报文:
- 请求行:请求方法,协议名,版本号,请求URI
- 请求头部
- 空行
- 请求体
响应报文
- 状态行:协议名,版本号,返回的状态码
- 响应头部
- 空行
- 响应体
3.2 报文实例
四. HTTP首部
请求头参数:
Content-type
Host
Connection
Content-length
cookie
Date
last-modify
cache-control
HTTP 首部是构成HTTP报文的要素之一
在HTTP通信过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外信息的作用
4.1 首部分类
- 通用首部字段:请求报文和相应报文都会使用的
- 请求首部字段
- 响应首部字段
- 实体首部字段:补充了资源内容的更新时间等实体相关的信息
五. HTTP状态码
状态码表示客户端请求的返回结果
状态码中的第一位指定响应类别,后两类无分类
- 状态码类别
5.1 常见状态码
- 200:OK,请求成功,请求被正常处理
- 204:请求成功,但是没有资源返回
- 301:永久性重定向
- 302:临时性重定向
- 403:服务器拒绝访问
- 404:无法找到请求资源
- 500:服务器错误
六. HTTP缓存处理
缓存是指代理服务器内保存的资源副本,利用缓存可以减少对服务器的访问,因此也就节省了通信流量和通信时间
缓存是服务器是代理服务器的一种,当代理转发从服务器返回的资源时,代理服务器会返回一份资源的副本
6.1 缓存服务器
6.2 客户端缓存
缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中。把客户端缓存称为临时网络文件
另外,和缓存服务器相同的一点是,当判定缓存过期后,会向源服务器确认资源的有效性。若判断浏览器缓存失效,浏览器会再次请求新资源。
6.3 缓存有效期
6.4 缓存相关设置
- 强缓存:
- Cache-Control
- Expires
- Pragma:在 HTTP 1.1中已经被废弃
- 协商缓存:
- ETag/If-Not-Match
- Last-Modified/If-Modified-Since
6.5 浏览器首次和再次发送请求的执行流程图
浏览器首次发送请求
浏览器再次发送请求
参考文章:简书:一文读懂http缓存
七. 其它问题
7.1 GET和POST的区别
- GET请求的参数包含在URL中,对外可见,所以安全性较差,POST请求的参数包含在请求体中,对外不可见,相对安全
- 浏览器会主动缓存GET请求的相关资源,但是对于POST,浏览器不会主动缓存,除非手动设置
- GET请求的参数有长度限制,但是POST没有
- GET请求在浏览器回退时是无害的,但是POST会重新发送请求
- GET请求的参数,会被保存在浏览器的历史记录里面,但是POST不会
7.2 TCP和UDP的区别
TCP: 三次握手,稳定性强,数据可靠,速度慢,占用系统资源高,适合少量的数据传输
UDP:
总结:
- TCP面向连接,UDP是无连接的,即发送数据之前不需要建立连接
- TCP提供可靠的服务,即TCP连接传送的数据,无差错,不丢失。UDP尽最大努力交付,但是不保证数 据的可靠性
- TCP只能是一对一,UDP可以一对一,一对多,多对一