HTTP各个版本区别与HTTPS

本文详细介绍了HTTP协议的不同版本,从HTTP/0.9到HTTP/2.0的特性变化,包括HTTP的特点、报文格式,以及Keep-Alive和多路复用的概念。同时,文章对比了HTTP与HTTPS,阐述了HTTPS的加密、身份验证及数据完整性保护等特性,解释了HTTPS通信过程和与HTTP的主要区别。

HTTP协议

超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”

HTTP特点

1.无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
2.无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
3.基于请求和响应:基本的特性,由客户端发起请求,服务端响应
4.简单快速、灵活
5.通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

在这里插入图片描述

HTTP报文格式

在这里插入图片描述

http/0.9版本

只有一个命令GET,只支持纯文本内容

http1.0版本

任何格式的内容都可以发送,这使得互联网不仅可以传输文字,还能传输图像、视频、二进制等文件。
除了GET命令,还引入了POST命令和HEAD命令。

http请求和回应的格式改变,除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据
还增加了状态码(status code)、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等

HTTP1.0版本虽然是支持长链接,但是默认情况还是短连接,需要使用keep-alive参数来告知服务器建立一个长链接。短连接的主要缺点就是每个TCP链接只能发送一个请求,发送数据完毕,链接就会关闭,如果还要请求其他资源就必须要再创建一个连接,TCP 的链接成本是很高的,因为服务器和客户端之间建立链接需要进行三次握手,并且链接初始的时候发送速率是比较慢的,所以HTTP1.0版本的性能比较差。虽然keep-alive可以可以建立一个可以复用的TCP链接,但是这并不是一个根本的办法。

HTTP1.1版本

1.引入了持久连接( persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。
2.节约带宽,HTTP1.1支持只发送header头信息不带任何body信息,如果服务器认为客户端有权限请求指定数据那就返回100,没有就返回401,当客户端收到100的时候可以才把要请求的信息发给服务器。并且1.1还支持了请求部分内容,如果当前客户端已经有一部分资源了,只需要向服务器请求另外的部分资源即可,这也是支持文件断点续传的基础。
3.1.1版本中增加了host处理,在HTTP1.0中认为每台服务器都绑定一个唯一的ip地址,因此在URL中并没有传递主机名,但是随着虚拟机技术的发展,可能在一台物理机器上存在多个虚拟主机,并且他们共享了一个ip地址,http1.1中请求消息和响应消息都支持host头域,如果不存在还会报出错误

虽然1.1版本对1.0有了很大的提升但是他还是存在缺点,在同一个TCP里边所有数据的通信都是按照次序的,服务器只有处理完一个回应,才会解决下一个回应要是前边某个回应处理的比较慢,就会出现后边很多回应等待的情况,这就是常说的队头阻塞。

http协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度。
http1.x版本问题:
http1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,无法保证数据的安全性。

1.1版本允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应,可能会造成Head-of-line blocking的问题。

http1.x支持了keep-alive,来弥补多次创建连接产生的延迟,但是keepalive使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站), keep-alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间

HTTP2.0版本

  1. 2.0相比于1.x版本中引入了二进制格式,HTTP1.x版本中的解析是基于文本的,而2.0则是基于二进制的,二进制只有01两种信息,这样的数据传输方便并且出错率低。
    2.HTTP2.0版本中支持多路复用,支持同一个链接并发处理多个请求,并且并发请求的数量要比以前高出很多的数量级。当然http1.1版本中也支持创建多个TCP链接来处理多个并发的请求,但是创建TCP链接本身也是存在开销的,并且在链接创建初期传输的速度是比较慢的。
    3.之前我们说从1.0版本开始请求和响应增加了header,header里边带有大量信息,并且每次都要重新进行发送,2.0版本通过算法把header进行了压缩这样数据体积就更小,在网络上传输就更快。
    4.HTTP2.0还支持服务器推送,服务器推送是当客户端请求一定数据的时候,服务器会额外的推送一些客户端可能会用到的信息,这样当客户端再次请求这个信息的时候,就可以直接从本机缓存中读取而不需要再次向服务器请求数据了。
    在这里插入图片描述
    这是网上的图片,这个图片很好的解释了长链接和多路复用的区别。至于短连接,无非就是当请求往index.html之后链接就会断开,需要再重新创建一个连接来获取scripts.css文件
    在这里插入图片描述
    在这里插入图片描述
    这两个图片则分别是没有服务器推送和有服务器推送的请求的区别。

Keep-Alive解决的核心问题

一定时间内,同一域名多次请求数据,只建立一次HTTP请求,其他请求可复用每一次建立的连接通道,以达到提高请求效率的问题。在HTTP1.1中是默认开启了Keep-Alive,他解决了多次连接的问题,但是依然有两个效率上的问题:
1.串行的文件传输。当请求a文件时,b文件只能等待,等待a连接到服务器、服务器处理文件、服务器返回文件,这三个步骤。
2.连接数过多,就需要等待前面某个请求处理完成。

Http2的多路复用

HTTP/2的多路复用就是为了解决上述的两个性能问题。

  1. 解决第一个:在HTTP1.1的协议中,我们传输的request和response都是基本于文本
    的,这样就会引发一个问题:所有的数据必须按顺序传输,比如需要传输:hello
    world,只能从h到d一个一个的传输,不能并行传输,因为接收端并不知道这些字符的
    顺序,所以并行传输在HTTP1.1是不能实现的。HTTP/2引入二进制数据帧​和流的概念
    ,其中帧对数据进行顺序标识。这样浏览器收到数据之后,就可以按照序列对数据进
    行合并,而不会出现合并后数据错乱的情况。同样是因为有了序列,服务器就可以并
    行的传输数据,这就是流所做的事情。
  2. HTTP/2对同一域名下所有请求都是基于流,也就是说同一域名不管访问多少文件,
    也只建立一路连接。同样​Apache的最大连接数为300,因为有了这个新特性,最大的
    并发就可以提升到300,比原来提升了6倍!

Http请求方式,请求头

GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取
POST请求会 向指定资源提交数据,请求服务器进行处理,如:表单数据提交
HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响
应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全
部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看 服务器的性能
PUT请求会身向指定资源位置上传其最新内容,PUT方法是幂等的方法。通过该方法
客户端可以将指定资源的最新数据传送给服务器取代指定的资源的内容。

HTTPS

《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证(就是确认网站的真实性),同时保护交换数据的隐私与完整性(建立一个信息安全通道,来保证数据传输的安全)。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。

HTTPS通信的过程

参考B站视频
https://www.bilibili.com/video/BV1ra4y1v7jS/?spm_id_from=333.788.recommend_more_video.-1
https://www.bilibili.com/video/BV1EK4y1b7Mu/?spm_id_from=333.788.recommend_more_video.1

HTTPS特点

基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

在这里插入图片描述

通过抓包可以看到数据不是明文传输,而且HTTPS有如下特点:

1.内容加密:采用混合加密技术,中间者无法直接查看明文内容
2.验证身份:通过证书认证客户端访问的是自己的服务器
3.保护数据完整性:防止传输的内容被中间人冒充或者篡改

**混合加密:**结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。

**数字摘要:**通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。

**数字签名技术:**数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。

  • 收方能够证实发送方的真实身份;
  • 发送方事后不能否认所发送过的报文;
  • 收方或非法者不能伪造、篡改报文。

非对称加密过程需要用到公钥进行加密,那么公钥从何而来?其实公钥就被包含在数字证书中,数字证书通常来说是由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,证书中包含了一个密钥对(公钥和私钥)和所有者识别信息。数字证书被放到服务端,具有服务器身份验证和数据传输加密功能。

HTTPS和HTTP的区别主要如下

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。服务端发送证书,也就是公钥私钥中的公钥给客户端,客户端通过该公钥计算得到在本次通信中才使用的pms,传递给服务端,服务端如果能正常解码该消息,则之后的通信都是用该次通信对应的密钥进行
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加
密传输、身份认证的网络协议,比http协议安全。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值