一、优点
1.1 可扩展
正是因为HTTP规范中限制很少,告诉你可以做什么,但是不会告诉你各种条条框框不能做什么,所以,很容易扩展,这也是为什么从HTTP/0.9诞生,一直扩展升级,添加更多的特性的原因。
1.2 传输可靠性
由于底层是基于TCP协议的,所以继承了TCP传输数据的可靠性,主要体现在[1]:
- 数据的顺序传输;
- 丢包重传,保证可靠;
- 连接维护;
- 流量控制,保证稳定;
- 拥塞控制,及时调整,最大程度保证传输正常进行。
1.3 基于请求应答模式
只有一方先主动发起连接和请求之后,接收方才可以进行响应。HTTP正是基于这种一问一答的请求应答模式。如果客户端不请求,服务端就不会搭理客户端。
虽然后面HTTP/2出现了服务端推送[2],但是也是针对特定资源的推送,并不是服务端想推送什么就推送什么。
1.4 无状态
有状态意味着一定会通过某种状态标识为去追踪状态,就像TCP的状态机,TCP请求头有特定的状态标识位来维护连接的状态。
HTTP并没有提供记录状态的地方,也就是说在交互性场景中,HTTP没有记忆能力。这就会导致这样的问题:
- 同一个用户多次访问一个网站,都需要重复读做身份验证。
即使开启了keep-alive机制,也只是TCP层面的维持连接,对于HTTP层来说,看起来还是无状态的。
我们不能每次都要让用户输入账号密码进行身份验证吧,为此才会出现Cookie和Session,为HTTP弥补了状态存储的问题。
二、缺点
2.1 明文传输,不安全
我们通过抓包工具抓HTTP/1.1的包,通过肉眼都可以看到请求头和请求体里面的内容,那么用户登录请求的时候,传输的账号密码以下子就可以捕获到了。
我们知道,数据在网络中请求的链路是很漫长的,只要任何一个环节抓到了你的包,你的数据就泄露了。这也是为什么要推出HTTPS的原因。
2.2 性能较差(请求-应答)
由于使用请求应答机制,每次都需要传一大段请求头,效率比较差。
另外,HTTP/1.1基于请求-应答模式,在应用层存在队头阻塞问题,并且TCP层同样会存在TCP的队头阻塞问题,导致性能比较差,需要通过各种奇门妙招去优化网络请求。
效率问题正是促使HTTP/2、HTTP/3诞生的原因之一。
参考: https://www.itzhai.com/articles/getting-to-know-http-1-1.html
https://www.cnblogs.com/traditional/p/15373971.html
标签:状态,HTTP,1.1,应答,优缺点,TCP,请求 From: https://blog.51cto.com/u_14014612/6223553