http协议的概念
http是一种超文本传输协议,是无状态的,以请求应答方式运行的协议,使用可扩展的语义和自描述消息格式。 http协议是基于tcp协议来传输数据的。
http协议的发展
http0.9:HTTP/0.9是第一个版本的HTTP协议,已过时。只允许客户端发送GET这一种请求,不支持请求头。由于没有协议头,造成了HTTP/0.9协议只支持一种内容,即纯文本。不过网页仍然支持用HTML语言格式化,同时无法插入图片,这个时候的http协议就已经具有无状态性的特点了。后面出现了http1.0、http1.1、http2.0等
http1.0
相比http0.9的优势:
- 支持请求头和响应头
- 响应对象以一个响应状态行开始
- 响应对象不只限于超文本
- 支持post请求提交数据,支持get,head,post方法。
- 支持长连接(还还没成为标准),缓存机制,还有支持身份认证
http1.1
相比http1.0的优势:
- 默认为长连接,keep-alive:connection
- 支持在一个tcp连接上传送多个请求和响应(但是还是有缺点,要排队完成,会造成队头堵塞)
- 增加了缓存处理字段比如Cache-Control
- 新增了一些状态码,如409(conflict)表示请求的资源与当前资源发生冲突,410Gone,资源永久删除
http2.0
- 二进制分帧:把数据分割成以帧为单位的小数据,并且同一个数据里的小数据会有一个相同的标识符
- 多路复用:解决了上一个版本的队头堵塞的问题,一个TCP连接可以交错传递帧,还可以这些帧的优先级。(持久化连接)
- 头部压缩,每次请求都要携带头部信息,会浪费资源,所以要求通讯双方各缓存一份首部字段表。
- 服务端推送,服务端会推测客户端可能需要的资源(缺点,客户端误触,但发送资源。增加浏览器缓存压力)
HTTPS
https相比http多了层安全加密协议,就是SSL/TLS协议,现在用的比较多的是TLS。在http请求的基础上对数据进行加密以保证传输的安全性。
HTTPS请求流程:
- 客户端发起请求
- 服务端返回公钥
- 客户端验证公钥有效性
- 生成一个随机数
- 用公钥对随机数进行加密
- 将密钥传输给服务端
- 服务端用私钥进行解密
- 用解密得到的随机数对要响应给客户端的数据进行加密
- 客户端拿到加密数据用随机数解密。