HTTP1.0 1.1 2.0 HTTP和HTTPS结构区别 加密流程

HTTP1.0和HTTP1.1区别:

1.HTTP1.1支持长连接,在一个TCP连接上可以进行多次请求和响应,减少了建立和关闭连接的消耗和延迟(Connection: Keep-Alive);而HTTP1.0每次请求都需要重新创建连接;

2.带宽优化:HTTP1.1在请求头引入了range头域,允许只请求资源的某一部分,实现断点续传功能优化带宽;而HTTP1.0每次请求都从文件头开始传输整个数据资源;

3.(gzip压缩?)

通过SPDY方案对http1.x进行了优化,并衍生出HTTP2.0。两者区别:HTTP2.0 支持明文 HTTP 传输,而 SPDY强制使用 HTTPS;

HTTP2.0和HTTP1比较:

1.  2.0采用二进制格式,而HTTP1.x是基于文本进行解析;文本具有多样性因此需要考虑的场景很多

HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧。

这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率。

2. 2.0多路复用

HTTP/2 是可以在一个TCP连接中并发多个请求或回应,而不用按照顺序一一对应。移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率。 建立的连接中接收方根据id再归属到不同的服务端请求中即可;

举例来说,在一个 TCP 连接里,服务器收到了客户端 A 和 B 的两个请求,如果发现 A 处理过程非常耗时,于是就回应 A 请求已经处理好的部分,接着回应 B 请求,完成后,再回应 A 请求剩下的部分。

3. 2.0head头部压缩:减小传输大小。采用HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。(gzip是http1.1采用的,http2已经不用了)

HTTP/2 有哪些缺陷?HTTP/3 做了哪些优化?

HTTP/2 主要的问题在于,多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。

  • HTTP/1.1 中的管道( pipeline)传输中如果有一个请求阻塞了,那么队列后请求也统统被阻塞住了
  • HTTP/2 多个请求复用一个TCP连接,一旦发生丢包,就会阻塞住所有的 HTTP 请求。

这都是基于 TCP 传输层的问题,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!

UDP 发生是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的一个丢包全部重传问题。大家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。

  • QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。
  • TLS3 升级成了最新的 1.3 版本,头部压缩算法也升级成了 QPack。
  • HTTPS 要建立一个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数。


所以, QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议。 QUIC 是新协议,对于很多网络设备,根本不知道什么是 QUIC,只会当做 UDP,这样会出现新的问题。所以 HTTP/3 现在普及的进度非常的缓慢,不知道未来 UDP 是否能够逆袭 TCP。

HTTP和HTTPS区别:

1.HTTP(超文本传输协议)运行在TCP上,传输的内容都是明文;HTTPS(超文本传输安全协议)运行在SSL(依靠证书来验证服务器身份并进行通信加密)/TLS之上,然后再运行再TCP上,传输内容都属经过加密的;

2.此外,HTTPS用的是443端口,HTTP用的是80端口

提起HTTPS加密,不得不提一下加密方式:

1.对称和非对称加密

对称加密:加密与解密使用的是同样的共享密钥,所以速度快,但由于需要将密钥在网络传输,容易导致密钥泄漏,难以保证消息可靠性

非对称加密:采用非对称时,客户端和服务端均拥有一个公钥和私钥,公钥对外开放,私钥只有自己方可见,公钥加密只有私钥才能解密;这样,客户端在发送消息前先用服务端公钥加密,消息到了服务端,服务端自己再用私钥解密;   优点是安全,缺点:比对称加密慢,其次如果客户端发送的过程中公钥被中间人替换了,这样服务端无法确认公钥正确性

由于对称和非对称都有缺点,所以HTTPS采用数字证书的方式进行加密

2.数字证书和数字签名(包含了SSL)

一般是服务端主动去向CA(认证中心)申请数字证书(公钥),这个数字证书ssl就是作为公钥,前面不是说非对称加密怕公钥被替换了嘛,这里在CA申请的公钥就不会出现这种情况:

客户端如何对证书进行验证?(服务端传公钥给客户端,客户端传私钥回给服务端)

  1. 首先客户端需要确认服务端的身份是否合法
    客户端发起请求服务端地址,
    服务端响应返回证书(包含公钥,还有其他认证信息);
    客户端验证这个证书是否合法,如果是CA认证的,浏览器不会有任何反应,如果是服务端自己私建的,浏览器会弹窗让用户选择是否信任此证书。

  2. 客户端确认证书合法代表信任了服务端,然后就是传送通讯秘钥的过程
    客户端自己生成了一个随机字符串作为通讯秘钥,并用公钥对通讯秘钥加密(还包括通讯用的加密算法),
    发送给服务端,
    服务端用私钥解密得到了通讯秘钥和通讯加密算法。

  3. 开始传输报文:
    服务端使用通讯秘钥和约定好的通讯加密算法对报文加密并返回,此后客户端和服务端的报文都会使用此秘钥和算法加密传输(对称加密)。

HTTPS在传输的过程中会涉及到三个密钥:

  • 服务器端的公钥和私钥,用来进行非对称加密(客户端传数据给服务端过程是非对称,客户端要用公钥加密同时服务端需要用私钥解密获取数据和随机秘钥)
  • 客户端生成的随机密钥,用来进行对称加密(服务端传数据给客户端是对称加密,服务端只用到随机秘钥加密,同时客户端也只用随机秘钥解密即可)

以上3步就是一次完整的TLS握手过程, 因此https创建链接经历了3次TCP握手 + 1次TLS握手;

HTTP报文(请求和响应):


请求报文:

组成:请求行(含请求方法GET或POST等,以及URL  (Uri一般用来定位本地文件,URL一般用来网络请求))),请求头部,请求数据

请求方法:

GET和POST区别:

1.GET可以提交少量参数,放在URL之后用?分开,参数和参数间用&连接,eg:baidu.com?name=test1&id=123456;  而POST会把提交的数据放到请求数据中;

2.GET提交数据有大小限制(因为浏览器对URL有长度限制,1024个字符),而POST方法提交的数据没有限制;

3.GET方式提交关键信息如用户名密码等会出现在URL中 并不安全;

请求头部:

含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。例如:

Accept:浏览器能接受的媒体类型;

Accept-language:可接受的语言   

Cookie:用来存储一些用户信息以便让服务器辨别用户身份的(cookie是存储在本地浏览器,而session存储在服务器,是一种服务器端的机制,服务器使用一种类似于hastable的结构来保存信息);

请求数据:

GET中没有请求数据而POST中有,POST适用于客户填写表单场合;

响应报文:

组成:状态行(含响应码),首部行(响应结果的长度,响应结果的类型等等),实体主体(响应正文);

响应码:

被包含在状态行中,常见响应码有:

  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

响应头中还包含了一些缓存控制的信息:

  1. Cache-Control // 控制缓存
  2. Expire // 控制缓存
  3. ETag // 校验缓存用
  4. Last-Modified // 校验缓存用

相关文章链接:HTTP 缓存相关的响应头信息 - 简书

HTTP工作流程:

 一次HTTP操作称为一个事务,其工作整个过程如下:

     1 ) 、地址解析   

如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm

  在这一步,需要通过DNS(域名和ip的远端关系解析器)去解析域名localhost.com 从而拿到主机的IP地址(因为用的是TCP/IP协议,所以要拿IP)。

这一步有可能出现dns劫持;

什么是DNS劫持

  • 指攻击者利用其他攻击手段,篡改了某个域名的解析结果,使得指向该域名的IP变成了另一个IP,导致对相应网址的访问被劫持到另一个不可达的或者假冒的网址,从而实现非法窃取用户信息或者破坏正常网络服务的目的。

如何处理DNS劫持

  • 设置一个可靠的DNS服务器往往就可以解决问题。
  • 采用HttpDns:

相对与 DNS,HTTPDNS 的主要优点如下:

  • 降低时延
    缩短了查询链路。不像 DNS 查询那样需要访问多台 DNS 服务器,分别从根域名到各级域名查询,才能得到最终的结果;

  • 域名防劫持
    域名解析请求直接发送至HTTPDNS服务器,绕过运营商 Local DNS,避免域名劫持问题

  • (注意DNS有缓存,优先缓存策略下,如果出现连接不上后台服务的情况,先清除缓存试试)


    2)、封装HTTP请求数据包

     把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
     3)封装成TCP包,建立TCP连接(TCP的三次握手)

       在HTTP工作开始之前,客户端首先要通过网络与服务端连接,通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。

     4)客户机发送请求命令

       建立连接后,客户机发送一个HTTP请求响应给服务器

     5)服务器响应     

     服务器接到请求后,返回HTTP响应信息

     6)服务器关闭TCP连接(四次挥手)

     一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive 就代表需要保持连接不断开;

     7)浏览器渲染

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值