优点
【简单,灵活和易于扩展,应用广泛和跨平台】
1.简单:
http基本的报文格式就是header+body,头部信息也是key-value简单的文本形式,易于理解,降低了学习和使用的门槛
2.灵活和易于扩展:
(1)HTTP协议中的各类请求方法,URL,状态码,头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充
(2)HTTP工作在应用层(OSI第七层),他下层可以随意变化,比如:HTTPS就是在HTTP与TCP之间增加了SSL/TLS安全传输层
HTTP/1.1和HTTP/2.0传输协议使用的是TCP协议,而到了HTTP/3.0传输协议改用了UDP协议
3.广泛应用和跨平台:
缺点
1.【无状态】是一把双刃剑
好处:服务器不回去记忆HTTP状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能把更多的CPU和内存用来对外提供服务
坏处:服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦;
比如:登录淘宝-》添加购物车-》下单,这系列操作都要知道用户的身份才行,但是服务器不知道这些请求是有关联的,每次都要问一遍身份信息
如何解决无状态问题?:
采用Cookie技术,Cookie通过在请求和响应报文中写入Cookie信息来控制客户端的状态;
相当于,在客户端第一次请求后,服务器会下发一个装有客户信息的【小纸条】,后续客户端请求服务器时,再带上这个【小纸条】,服务器就能认得了
2.【明文传输】是一把双刃剑
好处:方便阅读,为工作带来极大的便利
缺点:HTTP所有的信息都暴露在光天化日之下,毫无隐私可言,很容易被窃取;
3.【不安全】
(1)通信使用明文(不加密),内容可能会被窃听,比如,账号容易被泄漏;
(2)不验证通信方的身份,因此有可能遭遇伪装,比如:访问盗版淘宝,拼多多
(3)无法证明报文的完整性,所以有可能已遭篡改,比如:网站植入广告;
如何解决安全问题?:
用HTTPS的方式解决,也就是通过引入SSL/TLS层,使得在安全上达到极致;
性能
HTTP协议基于TCP/IP,并且使用了【请求-应答】的通信模式,所以性能的关键就在这两点里
1.【长连接】:
早期HTTP/1.0性能上的一个很大问题就是每次发起一个请求,都要建立一次TCP连接(三次握手),来回做了多 次TCP建立连接与断开连接,增加了通信开销
解决方法:HTTP/1.1提出了长连接的通信方式,也叫持久连接;
长连接优点:减少TCP连接的重复建立和断开所造成的多余开销,减轻服务器负载
长连接特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态;
当然,如果某个HTTP长连接超过一定时间没有任何数据交互,服务端就会主动断开这个连接;
2.【管道网络传输】:
即在同一个TCP连接中,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间;
注意:服务器接受顺序必须按照接收请求的顺序来发送对这些管道化请求的响应
3.【队头阻塞】:
因为当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞了,会招致客户端一直请求不到数据,这也就是【队头阻塞】
注意:HTTP/1.1管道只解决了请求的对头阻塞,但没有解决响应的队头阻塞;
总之,HTTP/1.1的性能一般般,后续的HTTP/2和HTTP/3就是在优化HTTP的性能