HTTP HTTPS 的基本知识点
HTTP
-
HTTP 超文本传输协议, 他可以拆分成三个部分: 超文本,传输,协议。
协议表示两个以上的参与者,对参与这的一种行为约定和规范
HTTP 是一个双向协议
HTTP是一个文字、图片、视频的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本,HTML就是最常见的超文本。 -
HTTP 状态码
-
HTTP 常见字段
-
Host字段:客户端发送请求时,用来指定服务器的域名。
-
Content-Length 字段: 表明本次回应的数据长度
-
Connection 字段:Connection 字段最常用用于客户端要求服务器使用 TCP 持久连接,以便其他请求复用。HTTP/1.1版本的链接都是持久连接,但是为了兼容老版本HTTP, 需要制定connection 首部字段的值为Keep-Alive。Connection:keep-alive
-
Content-Type 字段:用于服务器回应时候,告诉客户端,本次数据是什么格式。 Content-Type: text/html; charset=utf-8。客户端请求时候可以使用Accept字段声明自己可以接受那些数据格式。Accept: /
-
Content-Encoding 字段:用于表明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式。
-
GET 与 POST
GET 方法的韩式是请求从服务器获取资源,这个资源可以是文本、页面、图片视频等
POST 方法是相反操作,它想URL指定的资源提交数据,数据就放在报文的body里。例如在文章底部,设置了留言,点击提交之后,浏览器就会执行一次POST请求,把你的留言文字放进了报文body里,然后拼接好POST请求头,通过TCP协议发送给浏览器。 -
HTTP特性
HTTP最突出的优点是简单、灵活和易于扩展、应用广泛和跨平台。
简单:HTTP基本的报文格式就是header + body, 头部信息也是 key - value, 简单文本的形式,易于理解,降低了学习和使用的门槛。
灵活和易于扩展: HTTP协议里的各种请求方法、URI/URL状态码,头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。HTTPS也就是在HTTP与TCP层之间增加了SSL/TLS安全传输层,HTTP/3甚至把TCP层换成基于UDP的QUIC
应用广泛和跨平台:从台式机的浏览器到手机上的各种APP,从看新闻、刷贴吧到购物理财、吃鸡,HTTP的应用片地开花,同时天然具有跨平台的优越性。 -
HTTP缺点
HTTP协议里有优缺点一体的双刃剑,分别是"无状态、明文传输", 同时还具有一大缺点————不安全。 -
无状态双刃剑
好处: 因为不会去记忆HTTP的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的CPU和内存用来对外提供服务。
坏处: 因为服务器没有记忆力他在完成相关联的操作时候会非常麻烦。 -
Cookie 技术解决无状态的问题
Cookie 通过在请求和响应报文中写入Cookie 信息来控制客户端的状态, 相当于在客户端第一次请求后,服务器会下发一个装有客户信息的小贴纸,后续客户端请求服务器的时候,带上小贴纸,服务器就能认得。 -
HTTPS 解决HTTP 的不安全性
通过接入SSL/TLS 层使得在安全上得到了极致。
是HTTP1.0 性能上一个很大的问题就是每发起一个请求都要新建立一次TCP连接,而且是串行请求,做了无畏的TCP链接的简历和断开,增加了通信的开销。
为了解决TCP连接的重复简历和断开造成的额外开销,减轻服务器端的负载,建立了持久连接。持久连接的特点是,只要任意一端没有明确的提出断开连接,就保持TCP连接状态。
HTTP/1.1采用了长连接的方式,这使得管道网络传输成为了可能。即在一个TCP连接里面,客户端可以发起多个请求,只要第一个请求发出去了,就不必等其回来,就可以发第二个请求出去,减少整体的相应时间。
请求应答模式家具了HTTP的心梗问题,因为当顺序发送的请求序列中的一个请求因为某种原因被阻塞时候, 在后面排队的所有请求也一同被阻塞了,会招致客户端一直请求不到数据,这也是队头阻塞,好比上班的路上塞车。
HTTPS
因为HTTP 是基于明文传输的,所以安全上会存在以下三个风险:窃听风险,篡改风险,冒充风险。(公钥加密,私钥解密)
HTTPS 解决以上问题的方式是:
- 混合加密的方式实现信息的机密,解决了窃听的风险。在通讯建立前采用非对称加密的方式交换会话密匙,后续就不再使用非对称加密,在通信过程中全部使用对称加密的会话密匙的方式加密明文数据。
- 摘要算法的方式来实现完整性,他能够为数据生成独一无二的指纹,指纹用于校验数据的完整性,解决了篡改的风险
- 将服务器的公匙放入数字证书中,解决了冒充的风险
整个SSL/TLS的握手阶段涉及四次通信,可见下图:
HTTP/1.1、 HTTP/2、 HTTP/3演变
-
HTTP 1.1 相比HTTP1.0 改进: 1、 使用TCP场链接的方式改善了HTTP/1.0短连接的性能开销。2、支持管道网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,以减少整体的相应时间。
HTTP/1.1 的性能瓶颈:1、 请求/相应头部未经压缩就发送,首部信息越多,延迟越大,智能压缩body部分。
2、发送冗长的首部,每次互相发送相同的首部造成的浪费较多。
3、服务器是按照请求的顺序进行相应的,如果服务器端相应慢,那么就会招致客户端一直请求不到数据,也就是队头阻塞。
4、请求只能从客户端开始,服务器端只能被动响应。 -
HTTP/2 协议是基于HTTPS的,所以HTTP/2的安全性是有一定保证的。 基于HTTP/1.1性能上的改进:
1、头部压缩,HTTP/2会压缩投,如果你发送多个请求他们的头是一样的或者相似的,那么协议会帮你消除重复的部分。
2、二进制格式,HTTP/2 不再像 HTTP/1.1 纯文本的形式的报文,而是全面采用了二进制格式, 头信息和数据题都是二进制,并且统称为帧:头信息帧和数据帧
3、HTTP/2 可以在一个连接中并发的多个请求或回应而不用按照顺序一一对应。降低的延迟,大幅度的提高了连接的利用率。
4、服务器端也可以主动向客户端发送信息。
5、HTTP/2 的所有包不是按照顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。HTTP/2 将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数 -
HTTP/2的主要问题在于,多个HTTP复用一个TCP连接,下层的TCP协议是不知道有多少个HTTP请求的,所以一旦发生的丢包现象,就会触发TCP的重传机制,这样在一个TCP中的所有HTTP请求就必须等待这个丢了的包被重传回来。
-
基于HTTP/2的问题,HTTP/3将下层的传输层由TCP 改为了UDP
UDP 是不可靠传输,但是UDP的QUIC协议可以实现类似TCP的可靠传输。
HTTPS
客户端如何验证证书的合法性
- 首先浏览器读取证书中的证书所有者、有效期等信息进行校验,校验证书的网站域名是否与证书颁发的域名一致,校验证书是否在有效期内
- 浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
- 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
- 如果找到,那么浏览器就会从操作系统中取出颁发者CA 的公钥(多数浏览器开发商发布
- 版本时,会事先在内部植入常用认证机关的公开密钥),然后对服务器发来的证书里面的签名进行解密
- 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
- 对比结果一致,则证明服务器发来的证书合法,没有被冒充
参考连接
https://cloud.tencent.com/developer/article/1464938
https://www.jianshu.com/p/94dd4b197f5b