http和https协议
Posted 栗子~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http和https协议相关的知识,希望对你有一定的参考价值。
文章目录
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
http和https协议
一、http 原理
HTTP 是一个无状态的协议。无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接, 这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服 务器端不保留连接的有关信息.HTTP 遵循请求(Request)/应答(Response)模型。客户机(浏览器)向 服务器发送请求,服务器处理请求并返回适当的应答。所有 HTTP 连接都被构造成一套请求和应答。
1、传输流程:
序号 | 传输流程阶段 | 操作 |
---|---|---|
1 | 地址解析 | 将url 解析成【协议名】,【主机】,【端口】,【对象路径】 |
2 | 封装http请求数据包 | 把以上部分结合本机自己的信息,封装成一个http请求包 |
3 | 封装成TCP包并建立连接 | 封装TCP请求包,并三次握手建立连接 |
4 | 发送请求 | 在连接中,客户端发送请求到服务端 |
5 | 服务器响应 | 服务器接到请求后,返回给客户端响应信息 |
6 | 关闭TCP | 响应结束,TCP四次挥手,关闭连接 |
扩展:
在【关闭TCP】阶段,正常情况下,响应结束,TCP连接断开,但如果在客户端发送的请求头上加【 Connection:keep-alive】表示TCP在发送后仍保持连接状态,这种情况下,浏览器可以继续通过相同的连接发送请求。
好处:
保持TCP连接,节省了每次请求三次握手的所需的时间,还节约了网络宽带。
2、http1.0和http1.1的区别
- 【长连接】----在HTTP1.1中默认开启长连接keep-alive,而在HTTP1.0中需要添加 Connection:keep-alive来开始长连接;
- 【管道机制】----HTTP1.1新增管道机制,即在同一个TCP连接里面,客户端可以同时发送多个请求;
- 【分块传输编码】----即服务端每产生一块数据,就发送一块,采用”流模式”而取代”缓存模式”;
- 【错误状态响应码】----相比HTTP1.0 ,HTTP1.1 新增了多个 错误状态响应码
- 【新增请求方式】----
- PUT:请求服务器存储一个资源;
- DELETE:请求服务器删除标识的资源;
- OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;
- TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;
- CONNECT:保留将来使用
3、http1.0和http1.1缺陷
- http1.0:
浏览器的每次请求都需要与服务器建立一个【TCP连接】,成本太高 - http1.1:
虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是【按次序进行】的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“【队头堵塞】” - 避免方式:一是减少请求数,二是同时多开持久连接
4、相比http1.x,http2.x最大的特点
- 最大的特点就是http 2.x 采用二进制格式而非文本格式,完【全多路复用】,而非有序并阻塞的、只需一个连接即可实现并行;
- 【完全二进制协议】HTTP1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制,http2.x 完全是二进制;
- 【报头压缩】HTTP 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如Cookie, 一 样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度。
对于相同的头部,不必再通过请求发送,只需发送一次,HTTP/2 对这一点做了优化,引入了头信息压缩机制;
一方面,头信息使用gzip或compress压缩后再发送,另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号; - 【服务器推送】HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就
成了我们常说的【HTTPS】;
5、扩展问题:
5.1、get和post的区别
- GET把参数包含在URL中,POST通过request body传递参数
- GET 不安全,POST 安全,因为GET参数直接暴露在URL中,所以不能传递敏感信息
- 对于参数类型,GET只接受ASCII字符,而POST没有限制。
- GET请求只能进行url编码,POST请求支持多种编码方式。
- GET请求在URL中传递的参数是有长度限制的,而POST没有。
5.2、post为什么是两次TCP连接
GET和POST本质上就是TCP链接,服务类别(GET, POST, PUT, DELETE等等)就相当于TCP连接中的交通规则,
GET和HTTP最大的区别就是GET产生一个TCP数据包,POST产生两个TCP数据包。
那么现在我们开始回答为什么POST要产生两个TCP数据包的原因:
对于POST,浏览器先发送header,服务器响应【100 continue】,浏览器再发送data,服务器响应【200 ok】(返回数据),
因此POST是两次TCP连接。
二、https
1、前提知识:
【HTTPS = HTTP+ TLS/SSL】
【TLS/SSL】:TSL/SSL全称安全传输协议,是介于TCP和HTTP之间的一层【安全协议】,不影响原有的TCP协议和HTTP协议
【对称加密】: 加密和解密的秘钥使用的是同一个.
【非对称加密】: 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥
2、https过程:
- 客户端使用HTTPS的URL访问Web服务器,要求与WEb服务器建立SSL连接
- Web服务器收到客户端的请求后,会将网站信息(证书中包含公钥)传送一份给客户端
- 客户端的浏览器与Web服务器协商SSL/TSL连接的安全协议等级,也就是信息加密的等级
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将对话的密钥加密并·传送网站
- Web服务器利用自己的私钥密出会话密钥
- web服务器利用会话密钥加密与客户端之间进行通信
3、https的优点
- 客户端产生的密钥只有客户端和服务器端能得到
- 加密的数据只有客户端和服务端才能得到明文
- 客户端到服务端的通信是安全的
4、https的局限/缺点
- HTTPS比HTTP耗费更多的服务器资源(https其实就是构建在SSL/TSL上的http协议,所以https比http多用多少服务器资源,主要看SSL/TSL本身消耗多少服务器资源)。
- HTTPS并不能防止站点被网络蜘蛛抓取。某些情形下被加密资源的URL可仅通过截获请求和响应大小推得,这就可使攻击者同时知道明文(公开的静态内容)和密文(被加密过的明文),从而选择密文攻击成为可能。
- SSL证书需要绑定IP,不能在同一IP上绑定多个域名。
5、http概述:
HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。
参考资料:
https://www.cnblogs.com/gxw123/p/13288957.html?utm_source=tuicool
https://juejin.cn/post/6844903824390537230
https://blog.csdn.net/happy_xiahuixiax/article/details/72859762
https://www.cnblogs.com/zhangshitong/p/6478721.html
https://juejin.cn/post/6844903826634309645
以上是关于http和https协议的主要内容,如果未能解决你的问题,请参考以下文章