HTTP请求

228 阅读7分钟

Http1.0 http1.1 http2.0的区别

image.png

HTTP1.0:(无连接,请求完即断开)

浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。

HTTP1.1:(建立连接,但是串行的;支持断点传输;)

HTTP/1.0中默认使用Connection: close。在HTTP/1.1中已经默认使用
Connection: keep-alive,避免了连接建立和释放的开销,但服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。通过Content-Length字段来判断当前请求的数据是否已经全部接收。不允许同时存在两个并行的响应。
断点续传:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

HTTP2.0: 在Google推出的spdy基础上改进

并行请求:

  • 二进制分帧:HTTP/2引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并行的传输数据,这就是流所做的事情。
  • 多路复用:每个请求是一个数据流,数据流以消息的方式发送,而消息又分为多个帧,帧头部记录着stream id用来标识所属的数据流,不同属的帧可以在连接中随机混杂在一起。接收方可以根据stream id将帧再归属到各自不同的请求当中去。 HTTP2.0实现了真正的并行传输,它能够在一个TCP上进行任意数量HTTP请求。而这个强大的功能则是基于“二进制分帧”的特性。
  • 头部压缩: gzip压缩
  • 服务器推送: 服务器除了对最初请求的响应外,服务器还可以额外的向客户端推送资源,而无需客户端明确的请求。

Https的请求过程(对称加密)

  1. 客户端发送请求https连接。
  2. 服务器返回加密公钥,通常是SSL证书。
  3. 客户端从这个SSL证书解析出公钥,并随机生成一个key,通过公钥加密这个key发送给服务器(这一步是安全的因为只有服务器才有私钥能读出这个key)。
  4. 服务器通过私钥解密出key。
  5. 客户端使用这个key来加密需要传输的数据。
  6. 服务器使用key来解析数据。 简单的来说SSL加密的方式是使用一个密钥来加密另一个密钥(key),在使用被加密的密钥来加密数据。
    参考:blog.csdn.net/github_4019…

HTTPS和HTTP的区别

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

HTTP请求过程

1.域名解析
2.三次握手创建TCP连接
3.服务器响应传输数据
4.四次挥手断开连接

三次握手:
第一次握手:客户端发送SYN报文和客户端初始序列号X,等待服务器确认。
第二次握手:服务器收到报文返回SYN+Ack报文和初始序列号Y,并对客户端序列号+1返回X+1
第三次握手:客户端收到服务器返回并返回Seq=X+1和Ack=Y+1

四次挥手:
第一次挥手:主动方发送断开请求。(发送断开请求之后主动方不会再发送任何数据,这次挥手后主动方发送功能关闭但仍能接收请求)
第二次挥手:被动方收到断开请求,并返回我知道了。(被动方收到断开请求后知道你不会再发数据了随即关闭自己的接收数据功能,此时被动方可能还有数据没传输完成)
第三次挥手:被动方继续传输未完成的数据,结束后发送我也不再发送数据的请求。(被动方此时关闭发送数据功能)
第四次挥手:主动方收到请求,返回可以断开(此时主动方关闭接收数据功能)

抓包工具为什么可以抓到请求,如何抓到HTTPS请求?
Fidder
通过设置filler的方式的来抓取到https的请求包
tools里面有个选项,https的选项中进行设置就可以

www.cnblogs.com/tester-xt/p…
使用抓包工具抓 HTTPS 包必须要将抓包工具的证书安装到客户端本地,并设置信任;

抓包原理:

前言:抓包工具为什么可以抓到请求,如何抓到HTTPS请求?
Fidder
使用抓包工具抓 HTTPS 包必须要将抓包工具的证书安装到客户端本地,并设置信任; 参考:www.cnblogs.com/tester-xt/p…

原理

http:代理转发
https:抓包工具的原理就是“伪装“,对客户端伪装成服务器,对服务器伪装成客户端;

HTTP抓包原理:
1.首先抓包工具会提供出代理服务,客户端需要连接该代理;
2.客户端发出 HTTP 请求时,会经过抓包工具的代理,抓包工具将请求的原文进行展示;
3.抓包工具使用该原文将请求发送给服务器;
4.服务器返回结果给抓包工具,抓包工具将返回结果进行展示;
5.抓包工具将服务器返回的结果原样返回给客户端;
抓包工具就相当于个透明的中间人,数据经过的时候它一只手接到数据,然后另一只手把数据传出去。

https抓包原理:
这个时候抓包工具对客户端来说相当于服务器,对服务器来说相当于客户端。在这个传输过程中,客户端会以为它就是目标服务器,服务器也会以为它就是请求发起的客户端。

  1. 客户端连接抓包工具提供的代理服务;
  2. 客户端需要安装抓包工具的根证书;
  3. 客户端发出 HTTPS 请求,抓包工具模拟服务器与客户端进行 TLS 握手交换密钥等流程;
  4. 抓包工具发送一个 HTTPS 请求给客户端请求的目标服务器,并与目标服务器进行 TLS 握手交换密钥等流程;
  5. 客户端使用与抓包工具协定好的密钥加密数据后发送给抓包工具;
  6. 抓包工具使用与客户端协定好的密钥解密数据,并将结果进行展示;
  7. 抓包工具将解密后的客户端数据,使用与服务器协定好的密钥进行加密后发送给目标服务器;
  8. 服务器解密数据后,做对应的逻辑处理,然后将返回结果使用与抓包工具协定好的密钥进行加密发送给抓包工具;
  9. 抓包工具将服务器返回的结果,用与服务器协定好的密钥解密,并将结果进行展示;
  10. 抓包工具将解密后的服务器返回数据,使用与客户端协定好的密钥进行加密后发送给客户端;
  11. 客户端解密数据;

为什么用抓包工具看HTTPS包是明文的(www.cnblogs.com/tester-xt/p…)
HTTPS 数据只是在传输时进行了加密,而抓包工具是接收到数据后再重新加密转发,所以抓包工具抓到的 HTTPS 包可以直接看到明文;