前端主要关注于应用层的 HTTP 协议,传输层的 TCP 协议,断舍离一下,就主要总结这两种协议了。
咱们主要关注于 TCP/IP 五层模型
的 应用层 和 传输层 就足够了。前端
应用层:浏览器
HTTP
、HTTPS
、FTP
、POP3
、SMTP
等。传输层:缓存
UDP
、TCP
UDP 是面向无链接的协议,它只会把数据传递给接收端,但不会关注接收端是否已经正确接收了数据,因此有时候 UDP 会被认为是不可靠的数据报协议。但这种特性反而适合多播,实时的视频和音频传输。
优势:安全
缺点:服务器
TCP 是面向有链接的协议,在使用
TCP 协议
传输数据以前必定须要在发送方和接收方之间创建链接。创建链接三次握手,断开链接四次挥手~
第一次握手:
网络
客户端向服务端发送一个 SYN(Seq=X) 包,客户端进入 SYN-SENT
状态,等待服务端的 ACK(Ack=X+1)回复。
ps: Seq 是序号,Ack 是确认序号。post
第二次握手:
this
服务端根据接收到客户端发来的 SYN(Seq=X) 包后返回一个 ACK(Ack=X+1) 以及 SYN(Seq=Y) 包给客户端,服务端进入 SYN-RECIVED
状态,等待客户端的 ACK(Ack=Y+1) 回复。网络传输协议
第三次握手:编码
客户端接收到 ACK(X+1) 后,进入 ESTABLISHED
状态。根据服务端发来的 SYN(Y) 返回一个 ACK(Y+1) 包给服务端。
服务端 接收 ACK(Y+1)后进入 ESTABLISHED
状态。此时链接创建成功。
这个过程能够用如下三句形象表示:
- (客户端):我想创建链接了,服务端你准备好没有呀?
- (服务端):我准备好了,你准备好没有?
- (客户端):我也准备好了,开始吧~
这个过程能够用如下四句句形象表示:
- (客户端):我想关闭链接了。
- (服务端):我知道了。
- (服务端):我如今准备关闭链接了,ok 吗?
- (客户端):ok,你关闭吧。
HTTP (HyperText Transfer Protocol) 超文本传输协议 是一个基于 TCP (传输层) 的应用层协议,是客户端与服务端之间请求和响应的标准。
客户端向服务器请求服务时,只需请求方法和请求路径。
客户端再次向服务器请求服务时,服务器并不知道客户端以前是否请求过。
每次请求都会创建一个 TCP 链接,请求处理完成后链接断开。
请求行:
GET https://www.baidu.com/ HTTP/1.1
由请求方法、URL、协议版本组成
响应行:
HTTP/1.1 200 OK
协议版本、状态码、状态信息组成
请求方法分为不少种,最经常使用的也就是 GET
和 POST
了。虽然请求方法不少,但更多的是为了传达语义。更多的方法的语义描述能够阅读 文档 。
能缓存、请求长度限制、 有历史记录
GET
多用于 无反作用(不修改资源)、幂等(请求次数与资源无关)的场景。
POST
相对GET
安全一点点,由于GET
请求发送的数据包含在 URL 里。
二者详细对比:

状态码表示了响应的状态,可让咱们知道这一次的请求是成功仍是失败,若是失败,是什么缘由致使的。
2XX 成功
3XX 重定向
4XX 客户端错误
5XX 服务器错误
更安全的网络传输协议
在同一个 TCP 链接上传输全部的请求数据,避免 队头阻塞(浏览器限制同一个域名下的链接数)问题
使用了 HPACK 压缩格式对传输的 header 进行 编码,减小了 header 的大小。并在两端维护了 索引表,用于记录出现过的 header ,避免 header 重复传输。
在以前的 HTTP 版本中,咱们是经过文本的方式传输数据。在 HTTP/2 中引入了新的编码机制,全部传输的数据都会被分割,并采用二进制格式编码。
服务端能够在客户端的某个请求后,主动推送其余客户端在以后会用到的资源。省去了客户端重复请求的步骤,下降了延迟。
参考资料:
http://www.javashuo.com/article/p-coyuakcx-bz.html
https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A?
http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/
https://juejin.im/book/5bdc715fe51d454e755f75ef/section/5bdc72b151882516f039fce3