关于HTTP和HTTPS的那些事儿 (最全总结)

关于HTTP和HTTPS的那些事儿 (最全总结)

一、 http/https区别:

1.https需要到CA申请证书,收费的,具有安全性的ssl加密传输协议, 端口: 443, 由ssl+http协议构建 可进行加密传输,身份认证

1)信任主机问题:采用https的server必须要从CA申请一个用于证明服务器用途类型的证书,这个证书只有勇于对应的sercer的时候 客户端才能信任该主机
2)防止通讯过程中数据的泄密和被篡改

2.传输协议
HTTP : 超文本传输协议, 明文传输 不安全。无状态 免费 端口:80

流程图:HTTP:

HTTP-应用层----->TCP-传输层----->IP-网络层------>网络接口-数据链路层

HTTPS:

HTTP-应用层----> TSL/SSL-安全层 -----> TCP-传输层------>IP-网络层----->网络接口-数据链路层
**注意**:// TSL是SSL的升级替代版。 

3.写法区别: 前缀不同, 客户端处理方式也不同

HTTP:如果是http请求 客户端会打开一条道服务端端口80(默认)的链接 并发送老的http请求

HTTPS:客户端会打开一条到服务端端口443的链接 ,然后与服务器握手,以二进制的格式与服务器交换一些ssl的安全参数,附加上加密的http请求 (这就是客户端与服务端ssl握手的过程)

SSL/TSL的常见开源实现方式上OpenSSL,Openssl是一个开放源代码的软件库包,这个包用来进行安全通行 ,避免窃听 ,同时确认另一端链接者端身份 ,广泛被应用在互联网网页服务器上 

二、HTTP1.0 和HTTP1.1的区别:

1.缓存处理:在http1.0中主要使用header里的IF-Modified-Since,Expires来做为缓存判断的标准
  http1.1则引入了更多的缓存控制策略例如Entity tag,IF-Unmodified-Since If-None-Match等更多可供缓存头来控制缓存策略

2.带宽优化及网络链接的使用: HTTP1.0中存在浪费带宽的现象 ,例如:客户端只是需要某一个对象的部分,而服务器却将整个对象送过来了,并且不支持断点续传的功能,http1。1中则中请求头引入了range头域,它允许只请求资源的某个部分 ,返回码是206)(Partial Content),这样就方便开发者自由的选择以便于充分利用带宽和链接

3.错误通知的管理:中http1.1中新增了24个错误状态相应吗,如409(Conflict)表示请求的资源与资源的当前状态发生冲突; 410(Gone)表示服务器上的某个资源被永久性的删除

4.Host头处理,中HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,中请求消息的URL中并没有船渡主机名(hostname)。但是随着虚拟主机的技术的发展 一台物理服务器上可以存在多个虚拟主机(Multi-homed Web server),并且他们共享一个IP地址。HTTP1.1的请求消息和响应消息都支持Host头域,并且请求中如果没有Host头域会报告一个错误400(Rad Request)

5.长链接: Http1.1支持长链接(PersistentConnection)和请求的流水线(Pipelining)处理,在Http1.1中默认开启Connection:Keep-alive。一定程度上弥补了Http1.0每次请求都要创建链接的缺点

三、SPDY

SPDY是HTTP1.x的优化方案
2012年Google提出可SPDY的方案,优化了Http1.x的请求延迟,解决了Httpq.x的安全性:具体如下:

1.降低延迟,针对http高延时的问题,SPDY优雅的采取了多复用(multiplexing)多路复用通过多个请求stream共享一个tcp链接多方式 ,解决了hol blocking多问题,降低了演示同时提高了带宽的利用率

2.请求优先级(request prioritization):多路复用带来一个新的问题是,中链接共享的基础之上kennel会导致关键请求被阻塞,SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应

3.header压缩:前面提到Http1.x的header很多时候都是重复多余的,选择适合的压缩算法可以减少包的大小和数量

4.基于HTTPS的加密协议传输,大大提高了传输数据的可靠性

5.服务端推送(server push),采用了SPDY的网页,例如有一个请求需发送一个文件 客户端收到数据的同时 服务端会讲style.js的文件推送给客户端 ,当客户端再次尝试获取数据的同时 就可以直接从缓存中获取 不用再次发送请求

SPDY的构成图:

HTTP------>SPDY------>SSL----->TCP

SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议 (将HTTP1.x的内容封装成一种新的frame格式),同时可以使用已有的SSL功能

四、HTTP2.0和HTTP1.x相比的新特性:

1.新的二进制格式:HTTP1.x的解析是基于文本(文本协议的格式解析存在缺陷)。HTTP2.0采用二进制的格式只认0和1,实现方便且健壮

2.多路复用(MultiPlexing):就是链接共享 ,每一个request都是用作链接共享机制的,一个request对应一个id,一个链接上可以有多个request,每个链接的request可以随机的混杂在一起接收方可以根据request的id将request在归属到哥哥不同的服务端请求里 

3.Header压缩,在HTTP2.0中使用encoder来减少需要传输的header大小,通讯双方个字cache一份Headerfields表,避免了重复的header传输,又减少了需要传输的大小

4.服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能

五、HTTPS请求慢的解决方法:

1.不通过DNS解析,直接访问IP

2.解决链接无法复用

http1.0协议头里可以设置Connection:Keep-Alive 或者Connection:Close,选择是否允许一定时间内复用连接(时间可由服务器控制)。但是这对APP端端请求成效不大,因为App端端请求比较分散且时间跨度相对较大

解决方案:基于tcp的长链接(主要)移动端建立一条自己的长链接通道,通道的实现基于tcp方案。基于tcp的socket编程技术难度相对复杂很多,而且需要自己定制协议。但是信息的上报推送变得更及时,请求量的爆发时间点还能减少服务器的压力(避免频繁创建和销毁链接)

六、Request组成

客户端发送一个http请求到服务器的请求消息包括以下格式:
请求行(request line),请求头(header),空行和请求数据四个部分组成

get例子:
	1.请求行 用来说明请求数据 要访问的资源以及苏使用的http版本
	
	2.请求头 紧接着请求行(即第一行)之后的部分 ,用来说明服务器要使用的附加信息 从第二行起为请求头
	3,空行: 请求头部后面的空行是必须的 及时第四部分的请求数据为空 也必须有空行 

	4.请求数据也叫主体,可以添加任意的其他数据 

post例子:
	1.请求行 ,第一行说明是post请求 以及http1.1版本

	2.请求头 
	
	3,空行

	4,请求数据

七、Response组成

一般情况下,服务器接受并处理客户端发送过来的请求后会返回一个http的响应信息

http响应也由四个部分组成:状态行 消息报文,消息报头 空行和响应正文

第一部分 :状态行,由http协议版本号 状态吗 状态消息 三部分组成

第一行为状态行 (http/1.1)表明http版本为1.1版本 状态吗为200 消息为ok

第二部分 消息报头 用来说明客户端要使用的一些附加信息 

第二行和第三行为为消息报头,date生成相应的时间和日期 : Content-Type 指定了MIME类型的	

HTML(text/html,UTF-8)

第三部分 : 空行 消息报头后面的空行是必须的 

第四部分 响应正文 ,服务器返回个客户端的文本信息 

八、http缓存

http的缓存机制也是依赖于请求和响应的header里的参数实现的 ,最终响应是从缓存获取

HTTP的缓存可以分为两种:

强制缓存:需要服务端参与判断是否继续使用缓存,当客户端第一次请求数据是,服务端返回了缓存的过期时间 (Expires与 Cache -Control) ,没有过期就可以继续使用缓存,否则则不适用,无需再向服务端询问 


对比缓存: 需要服务端参与判断是否继续使用缓存,当客户端第一次请求数据时,服务端会讲缓存标示与数据一起返回给客户端 ,客户端将两者备份到缓存中 ,再次请求数据是 客户端从上醋的备份的缓存标示发送给服务端 ,服务端根据表示进行判断 如果返回304 则表示客户端可以继续使用缓存 

强制缓存优先于对比缓存 

九、HTTP长链接:

HTTP1.0是短链接 ,HTTP1.1是长链接,也就是默认COnnection的值就是Keep-aplive 但是长链接是指是指TCP链接 而不是HTTP链接 TCP链接是一个双向的通道 他是可以保持一段时间不关闭的 因此TCp链接才有真正的长链接和端链接这一说 

十、HTTP1.1为什么要使用tcp长链接

长链接是指的tcp链接,也就是说服用的tcp链接 ,即长链接的情况下,多个http请求可以复用一个tcp链接,这也就节省了很多tcp链接 建立和端开的消耗      
长链接并不是永久的链接。,如果一段时间内(具体的时间长短 是可以这header当时中进行设置的 ,也就是所谓的超时链接 )这个链接没有http请求发出的话 那么这个长链接就会被断掉

十一、HTTPs加密原理:

加密算法的类型基本分为了两种:

对称加密:加密用的密钥和解密说密钥是同一个 ,具有代表性的AES加密算法

非对称加密: 加密用的密钥成为公钥 解密用的密钥称为私钥 经常用到的RSA加密就是非对称加密

HASH加密算法:MD5 SHA1,SHA256

相比较对称加密而言 非对称机密的安全性更高 但是加密解密耗费的时间更长 速度慢

HTTPS= HTTP+SSL HTTPS的加密是的SSl中完成的

CA证书是数字证书 内容如下

1.证书的颁布机构 版本

2.证书的使用者

3.证书的公钥

4,证书的有效时间 

5.证书的数字签名 HASH值和签名Hash算法

十二、客户端验证CA证书:

CA证书的hash值是用证书的私钥进行加密后的值 ,客户端得到证书后 利用证书中的公钥去揭秘hash值 得到hash-a;然后利用证书内的签名hash算法生成一个hash-b 然后比较这个两个值 如果想等 说明证书是对的 可以信任 否则是错误的 有可能被篡改 ,无法建立起https链接 除此之外 还会验证CA证书的有效时间和域名相等

十三、HTTPS中的SSL握手建立过程:

例如 客户端A。服务端B

1,客户端和服务端建立ssl握手 ,客户端通过ca证书来确认服务端的身份 

2.互相传递三个随机数 之后通过这个随机数来生成一个密钥 

3,互相确认密钥 

4,数据通讯开始 ,都使用同一个对话密钥来解密
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值