一、介绍一下OSI七层模型和TCP/IP五层模型
1.1 OSI七层模型
1.2 TCP/IP五层模型
1.3 各层对应协议
二、HTTP协议和特点
2.1 基本概念
HTTP是超文本传输协议的缩写。它是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态协议。
2.2 协议特点
-
无连接
- 限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
-
无状态
- 协议对于事务处理没有记忆能力
-
简单快速
- 客户向服务器请求服务时,只需传送请求方法和路径
-
灵活
- HTTP允许传输任意类型的数据对象(正在传输的类型由Content-Type加以标记。
2.3 HTTP方法
- GET - 获取资源
- POST - 传输资源
- PUT - 更新资源
- DELETE - 删除资源
- HEAD - 获取报文首部
2.4 GET和POST的区别
- GET请求在浏览器回退时是无害的,POST会再次提交请求
- POST相对GET安全一些,因为GET请求的参数都暴露在URL中,而POST不会。
- GET请求参数会被完整的保留在浏览器历史记录里,而POST中的参数不会被保留
- GET请求会被浏览器主动缓存,而POST不会,除非手动设置
- POST可以通过request body 来传输比GET更多的数据。而且URL有长度限制,会影响GET的请求。
- 重点: POST的机制是浏览器先发送header,服务器响应100(continue),浏览器再发送data,服务器响应200(ok)返回请求的数据。
2.5 常见状态码
a. 1xx 指示信息
表示请求已接收
b. 2xx 成功
- 200 OK
- 204 No content 表示请求成功,但响应报文不含实体的主体部分
c. 3xx 重定向
- 301 永久性重定向,当浏览器收到的HTTP状态码为301时,下次访问对应网址就直接调整到新的网址,不会再访问原网址
- 302 临时性重定向,浏览器每次访问都要先去目标网址访问,再重定向到新的网址
- 303 表示资源存在着另一个URL,应使用GET方法获取资源
- 304 未修改。自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。浏览器请求本地缓存。
d. 4xx 客户端错误
- 400 请求报文存在语法错误
- 401 请求需要通过认证
- 403 请求访问被服务器拒绝
e. 5xx 服务器错误
- 500 服务器端在执行请求时发生了错误
- 501 服务器不支持当前请求所需要的某个功能
2.6 HTTP2
HTTP 2.0 相比于 HTTP 1.x,有着大幅度的性能提升
a. 多路复用
在 HTTP 2.0 中,有两个非常重要的概念,分别是帧(frame)和流(stream)。
帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。
多路复用,就是在一个 TCP 连接中可以存在多条流。 换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。
b. Header压缩
在 HTTP 2.0 中,使用了 HPACK 压缩格式对传输的 header 进行编码,减少了 header 的大小。并在两端维护了索引表,用于记录出现过的 header ,后面在传输过程中就可以传输已经记录过的 header 的键名,对端收到数据后就可以通过键名找到对应的值。
c. 服务端Push
在 HTTP 2.0 中,服务端可以在客户端某个请求后,主动推送其他资源。
可以想象以下情况,某些资源客户端是一定会请求的,这时就可以采取服务端 push 的技术,提前给客户端推送必要的资源,这样就可以相对减少一点延迟时间。当然在浏览器兼容的情况下你也可以使用 prefetch。