一、HTTP
1.建立连接和断开连接(三次握手和四次挥手)
HTTP 是 HyperText Transfer Protocol 的缩写,译为超文本传输协议。是一种应用于 OSI 七层模型中应用层的协议,是我们平常互联网网络通信传输的基础。它的作用就是规定了服务器和客户端之间的建立连接,请求数据,响应数据,关闭连接(我们常说的三次握手,四次挥手)。
- 进行请求阶段:进行三次握手:1. 客户端向服务端发送连接请求,2. 服务端回应客户端:ok,已经确认,3,客户端回应服务端,收到你的确认信息。浏览器对于服务器的请求,浏览器会将我们对于服务器的请求封装成请求头和请求体。请求头包括浏览器的类型,请求的域名,ip 地址,请求的方法类型等,请求体可以是参数形式,如**?page=3&offset=3**,也可以是 post 请求的哈希数据或者 json。每个请求头用 \r\n 隔开,请求头请求体用 \r\n\r\n 隔开,这是 HTTP 规定好的格式。
-
服务器响应:服务器接收到客户端传来的请求头请求体后,分解进行回应,首先以状态码开头,经常见到的 404 以及 302 这样的信息,接着浏览器接收到 html 信息就渲染成了我们所见到的页面。
- 关闭阶段:四次挥手:1.客户端发送关闭连接请求,2.服务端回复:收到请求,准备关闭,3.服务端发送关闭申请:我要断开了,4.客户端:收到,确认!
2.http/1.0
HTTP/1.0 规定浏览器与服务器之保持短暂的连接,浏览器的每次请求都需要与服务器建立一个 TCP 连接,服务器完成请求处理后立即断开 TCP 连接,服务器不追踪每个浏览器也不记录每个浏览器的请求。因为 TCP 请求是无状态的,所以每次都需要完成三次握手四次挥手,数据量一多,就非常浪费时间,效率比较低。
3.http/1.1
对于 HTTP/1.0 版本,1.1 版本对这一点做了改进:
引入了管道机制:TCP 连接建立后,不马上断开连接,而是过一会,如果没有收到客户端请求后,再断开连接。
这样做的好处有两点:1. 不需要多次的三次握手四次挥手,提高了效率,2. 因为一个服务器是被多个客户端同时访问的,一些信息如果客户端强制结束可能会发到其他的客户端,造成错误,如果可以延时关闭,可以给服务器充分的时间确认连接状态以及发送关闭信号。
4.http2.0
HTTP2 是 HTTP/1.1 的升级,客户端 TCP 连接只能一次一次的发送,为了提升效率,**HTTP2 引入了多路复用,就是可以客户端一次发送多个请求,服务端一起回复,提升了效率。**但由于在信息的封装上还不够成熟,技术成本比较高,已受到攻击,目前普及度不高。
二、Https
HTTPS 是 HyperText Transfer Protocol Secure 缩写,相较于 HTTP,突出了安全!因为在网络信息传输过程中服务端和客户端的信息都会被 SSL,TSL 加密,在传输的过程中,即便被截取了,别人也不知道你们的会话内容是什么,只有收发方才有对应的**去解开,再对内容进行回应。其中的原理就是:服务端和客户端都有两把钥匙:公钥和私钥,公钥用来加密数据,同时只能用自己的私钥去解开,这样及时公钥被截获,密文内容也**不了。
私钥使用非对称的方式生成的,关于非对称加密有兴趣可以自行搜索一下,实现的过程就是:
- 服务器发送公钥信息给服务器,
- 这个公钥是经过第三方认证加密的有数字证书,无法造假的,
- 浏览器接收到公钥,根据算法生成私钥,再把私钥加密返回给服务器,
- 服务器解析私钥,这样就有了共同的私钥了。
目前大部分网站都是采用这种协议了,不过 https 每年的价格也是不菲呢,大企业的证书年费用上十万都是正常的。