http协议介绍

完整的http请求流程

  1. 域名解析
    1.1. 浏览器、系统、路由等网络本地缓存
    1.2. isp服务缓存
    1.3. 根域名服务器递归搜索
  2. tcp三次握手
  3. 发起http请求
    3.1. 请求行:请求方法、url、http版本协议
    3.2. 请求头:host、user-agent、connection、accept、accept-encoding、accept-language、cookie、cache-control、Authorization
    3.3. 请求数据: 出现于post请求,Content-Length、Content-Type、data
  4. 服务器响应http请求
    4.1 状态行: 协议版本、状态码、状态码描述
    4.2 响应头:server、content-type、content-length、content-language、content-encoding
    4.3 响应数据:用户数据,如html
  5. 浏览器解析html代码,请求html代码中的资源
    5.1 keep-alive特性,建立一次http连接,可以请求多个资源。
    5.2 如果静态资源未过期,服务器发起询问请求,服务端返回304为未修改,直接读取本地缓存。
  6. 浏览器对页面进行渲染

http各版本对比

HTTP 0.9

  1. 无状态性,一次请求一次连接
  2. 只支持get请求,纯文本格式

HTTP 1.0

  1. 支持请求头、响应头
  2. 支持响应行
  3. 响应数据支持MIME
  4. 支持POST、HEAD、POST方法
  5. 支持长连接(Keep-Alive)、缓存机制、身份认证

HTTP 1.1

  1. 默认启动Keep-Alive连接
  2. 支持chunked编码传输,分块传输数据,并标明长度
  3. 支持字节范围请求:允许客户端只请求部分数据,以节约流量。Content-Range表明长度及偏移量。响应码为206
  4. Pipelining:支持发送多个顺序请求而不必等待每一个响应。类似tcp的滑动窗口
  5. 支持host请求头、响应头
  6. 增加了OPTIONS,PUT, DELETE, TRACE, CONNECT方法
  7. 增强了缓存机制:Cache-Control头

HTTP 2.0

目的:在http1.x基础上提升网络性能,降低延时

  1. Multiplexing多路复用,允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。(浏览器客户端对同一时间针对同一域名的请求数有限制)
  2. 二进制分帧,在应用层与传输层之间增加了二进制分帧层,头部信息会封装到HEADER frame,请求数据会被封装到DATA frame。并在一个连接中完成多资源传输。降低网络延时,提升网络吞吐。
  3. Header Compression首部压缩,使用HPACK算法,要求传输过程有序
  4. Server Push服务器推送,主动推动内嵌资源,相当于获取到html页面的同时获取到内嵌的资源
  5. 优先权和依赖

http 3.0

  1. 使用基于udp为底层传输协议的quic协议,上层仍然为http 2
    1.1. 多路流复用
    1.2. 灵活的拥塞控制算法
    1.3. 增强丢失恢复机制和转发纠错功能
    1.4. 更快的握手过程:减少冗余协议交换
    1.5. 在quic协议过程中完成了tls加密
  2. 增强了首部压缩,使用QPACK算法,无需有序传输

https

  1. 三次握手
  2. 交换公钥
    2.1. 客户端第一次发送https请求,把客户端支持的加密算法发送给服务端
    2.2. 服务端接收到请求后,和自己支持的加密算法进行比对,如果不符合,则断开连接。否则,服务端会把符合的算法和证书发给客户端,包括证书时间、证书日期、证书颁发的机构。
  3. 验证证书
    3.1. 客户端验证证书,包括颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等
    3.2. 验证通过后(或者用户接受了不信任的证书),客户端会生成一个随机字符串,然后用服务端的公钥进行加密。这里就保证了只有服务端才能看到这串随机字符串(因为服务端拥有公钥对应的私钥,RSA解密,可以知道客户端的随机字符串)。
  4. 交换随机字符串,并完成握手
    4.1. 客户端生成握手信息 用约定好的HASH算法,对握手信息进行取HASH,然后用随机字符串加密握手信息和握手信息的签名HASH值,把结果发给服务端。这里之所以要带上握手信息的HASH是因为,防止信息被篡改。如果信息被篡改,那么服务端接收到信息进行HASH时,就会发现HASH值和客户端传回来的不一样。这里就保证了信息不会被篡改。
    4.2. 服务端接收到加密信息后,首先用私钥解密得到随机字符串。然后用随机字符串解密握手信息,获得握手信息和握手信息的HASH值,服务端对握手信息进行HASH,比对客户端传回来的HASH。如果相同,则说明信息没有被篡改。服务端验证完客户端的信息以后,同样使用随机字符串加密握手信息和握手信息的HASH值发给客户端。
    4.4. 客户端接收到服务端发回来的握手信息后,用一开始生成的随机字符串对密文进行解密,得到握手信息和握手信息的HASH值,像一步服务端验证一样对握手信息进行校验,校验通过后,握手完毕。从这里开始,客户端和服务端的通信就使用那串随机字符串进行AES对称加密通信。

SSL TLS HTTPS

ssl是早期的https下的协议加密层。ssl3.0版本后修订为TLS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值