HTTP各版本简介

HTTP1.0

1. 请求方法

GET,POST,HEAD

2. 缺点
  1. 无状态:服务器不会记录上一次请求的任何内容,会出现类似于重复验证身份的情况。(可通过cookie, session, token解决)
  2. 无连接:每个http请求都需要建立一次TCP连接,多次TCP连接握手耗时。
  3. 不安全:数据以明文传输,容易被窃取;没有对访问对象进行身份验证,容易出现假网站情况;报文完整性难以验证,容易出现被插入恶意广告等情况。
3. GET vs. POST
  1. GET 主要用于从服务器获取资源;POST 主要是利用服务器上的一段代码来做处理,并获取处理结果。
  2. 从格式上看,GET请求参数在URL上,一般有长度限制(大部分为2K);POST请求参数在Body中,一般无长度限制。
  3. GET不会修改服务器上的数据,且是等幂方法(多次发起同一GET请求,请求结果一致);POST可能会修改服务器上的数据,且是非等幂方法(多次发起同一POST请求获得的结果一般不同)。
  4. GET在请求资源时效率较POST高。
  5. POST安全性较GET高,GET将请求参数直接置于URL中,用户可以在浏览器历史记录的URL中直接获取类似于账号密码等数据。

HTTP1.1

1. 改进
  1. 新增请求方法 PUT,PATCH,DELETE,OPTIONS,TRACE,CONNECT
  2. 新增头部(Cache-Control、ETag、If-None-Match…)以优化缓存策略
  3. 带宽优化:新增Range头部,允许请求资源的某一部分(响应码206, Partial Content)。断点续传
  4. 支持长连接:新增Connection:keep-alive头部,使得一个TCP连接允许进行多次http请求。(注意长连接不会一直保持,服务器会限制连接时间、最大请求次数等;客户端在判定传输数据完成后会主动断开连接(利用Range判断))
  5. Pipelining 数据的管道运输方案(串行数据请求-响应):
    非流水线:客户端需等待上一次请求响应完成后才可发起下一次请求;
    流水线:客户端可以连续按顺序发起多次请求,服务端也会按顺序连续响应(每次请求可节省一个RTT);但会出现队头堵塞的情况
  6. 新增一些错误响应码。
  7. Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

HTTP2.0

1. 改进
  1. 头部压缩:对于多个相似请求,可以在客户端与服务器端做一个约定:共同维护一张Header字段的索引映射表,使用索引值来代替Header字段,进而实现头部的压缩。
  2. 多路复用并行数据请求-响应)
    客户端可以并行发起多个请求,服务器也会并行响应,服务器会对每个请求使用类似时间片的方式处理,这样可以避免HTTP1.1中的队头堵塞情况。
  3. 数据统一使用二进制编码
  4. 每个请求/响应的数据包会有相应的编码并且不会再连续发送,可以通过设置优先级使得某些请求/响应数据包优先处理。
  5. 支持服务器推送

HTTPS

https就是安全的http,在传输层与应用层中间对http数据包新增SSL/TLS安全处理,对http传输数据进行安全加密以及所访问服务器进行身份验证。HTTPS使用新特定端口443

1. 过程

一、建立TCP连接
二、协商加密方法
在这里插入图片描述

  1. 客户端向服务器(443端口)发起HTTPS请求,携带客户端支持的加密算法列表等。
  2. 服务器选择好合适的加密算法,并携带服务器的CA认证证书(含非对称加密公钥),发送给客户端。
  3. 客户端验证CA证书,随机生成一个对称加密私钥并使用证书的公钥进行非对称加密,发送给服务器。
  4. 服务器使用与CA证书公钥配套的私钥对数据进行解密(非对称),得到对称加密私钥,对数据进行对称加密并发送给客户端。

三、数据传输。此后,客户端与服务器使用对此加密私钥来加密数据,进行数据传输。

2. HTTPS和HTTP的区别
  1. HTTPS是密文传输,HTTP是明文传输;
  2. 默认连接的端口号是不同的,HTTPS是443端口,而HTTP是80端口;
  3. HTTPS请求的过程需要CA证书要验证身份以保证客户端请求到服务器端之后,传回的响应是来自于服务器端,而HTTP则不需要CA证书;
  4. HTTPS=HTTP+加密+认证+完整性保护。

参考
HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事
HTTPS请求的整个过程的详细分析
HTTPS加密(握手)过程