1. 应用层
1.1 http超文本传输协议
如何避免服务器没有反应:保证服务器的稳定性,如果服务器没反应就认为服务器挂了,可以新建起一个服务器运行这部分服务的代码
1.1.1 http版本
http/0.9
只有GET
命令,只支持纯文本内容http/1.0
任何形式的内容都可以发送,不只是文字,包括了图像、视频、二进制文件等;引入了POST
和HEAD
命令;http
请求和回答的格式改变,除了数据部分,没次通信都必须包含头信息,用来描述一些元数据http/1.1
主流http
,引入了持久链接,TCP
链接默认不关闭,可以被多个请求复用;引入了管道机制,在同一个TCP
连接里,客户端可以同时发送多个请求,进一步改进了http
协议的效率;新增了PUT
、PATCH
、OPTIONS
、DELETE
方法;http
协议不带有所有状态,每次请求都需要附上所有信息,请求的很多字段都是重复的,浪费带宽,影响速度。
http/1.x
问题
- 在数据传输时,所有传输都是明文传输,无法保证数据的安全性;
1.1
版本允许复用TCP链接,但是同一个TCP
链接里,所有的数据通信是按次序进行的,服务器只有处理完一个回应才会处理下一个回应;http/1.x
支持了keepalive
,来弥补多次创建链接产生的延迟,但是keepalive
使用多了同样会给服务端带来大量的性能压力。
http/2.0
二进制协议,头信息和数据体都是二进制;复用TCP
链接,在一个连接里客户端和浏览器都可以同时发送多个请求或回应,且不需要按照顺序一一对应,避免了对头堵塞(多工);允许服务器未经请求主动向客户端发送资源(服务推送);引入头部信息压缩机制