前端学习23 http和https

1.概念

HTTP:超文本传输协议(Hyper Text Transfer Protocol)是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

HTTPS:超文本传输安全协议(Hypertext Transfer Protocol Secure,简称:HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由 HTTP 进行通信,利用 SSL/TLS 来加密数据包。HTTPS 的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

2.http和https区别

  • HTTP是明文传输,连接很简单,是无状态的。https协议是有SSL+HTTP协议构建的可进行加密传输、身份证的网络协议,比HTTP协议安全。
  • HTTP对搜索引擎更友好,利于SEO;谷歌、百度优先索引HTTPS网页。
  • 使用不同的连接方式,端口也不同,HTTPS标准端口443,HTTP标准端口80。
  • HTTPS协议需要CA证书,费用较高,而HTTP协议不需要。

3.HTTPS 握手过程

  • 客户端发起 HTTPS 请求,发送客户端生成的随机数1和支持的加密算法列表;
  • 服务端返回证书、服务端生成的随机数2、选择的加密方法给客户端;
  • 客户端对证书进行合法性验证,验证通过后再生成一个随机数3,并使用数字证书中的公钥,加密这个随机数,然后发给服务器。并且还会提供一个前面所有内容的 hash 的值,用来供服务器检验。
  • 服务器使用自己的私钥,来解密客户端发送过来的随机数3。并提供前面所有内容的 hash 值来供客户端检验。
  • 三次握手此时已经完成,之后客户端和服务端都会根据这三个随机数,生成一个随机对称密钥,之后的数据都通过随机对称密钥进行加密传输。

4.TCP的三次握手、四次挥手

4.1 三次握手

关键标志位

  • SYN,简写为S,同步标志位,用于建立会话请求,同步序列号;
  • ACK,简写为.,确认标志位,确认已接受的数据包;
  • FIN,简写为F,完成标志位,表示传输完毕,将要关闭连接;

若SYN=1,ACK=0,表示是来自发送方的一个“连接请求”;

若SYN=1,ACK=1,表示接收方“同意接受连接请求”。

第一次握手:客户端主动打开连接,将TCP报文标志位SYN置为1,并随机产生一个序号值seq=x(SYN=1,ACK=0,seq=x,请求连接),发送数据包给服务端。发送完毕进入SYN-SENT状态;

第二次握手:服务端接收到标志位为SYN=1,ACK=0的数据包,得知客户端请求建立连接。服务端将标志位置作:SYN=1,ACK=1,ack=x+1,并随机产生序号值seq=y;发送数据包给客户端,同意建立连接。进入SYN-RCVD状态。

第三次握手:客户端得到了服务端的确认。检查ACK是否为1,ack是否为x+1。若是的话,则ACK=1,ack=y+1。服务端再检查,ACK是否为1,ack是否为y+1。若正确则建立好连接通道。

第三次握手保证了B的资源不会被浪费(如果A一直不发送数据)。

4.2 四次挥手

第一次挥手: 客户端想释放连接。使FIN=1,表示请求释放连接,随机产生seq=x;发送给客户端,并进入FIN-WAIT-1阶段(半关闭状态,停止客户端向服务器端上发送数据)。但实际上,客户端还能向服务器端发送ACK确认报文。

第二次挥手: 服务器端接收到客户端想释放连接的请求。使ACK=1,ack=x+1,并随机产生seq=y。发送给客户端,表示“接收到了客户端的想释放连接的请求”。服务器端进入CLOSE-WAIT阶段。

客户端接收到报文,进入FIN-WAIT-2阶段。

前两次握手:客户端让服务器端知道:我想释放连接;服务器端让客户端知道:我知道了你想释放连接。于是可以确认关闭客户端到服务器端的连接,完成了一个方向上连接的释放!

第三次挥手: 在第二次挥手发送报文给客户端时,服务器端进入了CLOSE-WAIT阶段。当CLOSE-WAIT结束后, 服务器端做好了释放“服务器端到客户端方向”连接的准备。于是发送报文,使FIN=1,ACK=1,表示准备好释放连接。ack=x+1,seq=z;随后,服务器端进入LAST-ACK阶段。停止服务器端到客户端发送数据,但能接受来自客户端的数据。

第四次挥手: 客户端发送报文:ACK=1表示接收到了“服务器准备好释放连接".ack=z+1,seq=w;。

因为TCP是全双工模式,两个方向都可以进行通信,所以需要四次挥手来关闭两个方向上的连接。

全部评论

相关推荐

05-26 02:26
已编辑
长江大学 前端工程师
1.vue3用的选项式api还是组合式api?2.组合式api用setup语法糖吗?3.简单说下setup语法糖用与不用的区别?4.如果我用Set up,我里面写那个代码,它默认是什么生命周期,在哪个生命周期上执行的?我在里面还可以再次重复声明onMounted()吗?5.TypeScript有哪几种基本类型?6.Number小写开头和大写开头有什么区别?(一个是原始类型,一个是基于原始类型的包装类型;大写的是对象,可以对对象进行一些对象的操作。)7.主要用了Element-plus哪些组件?8.怎么实现的vue-router动态权限拦截?9.防抖功能怎么实现的?讲下原理?10.FCP做了哪些措施或策略?11.Vite分包策略会导致缓存问题吗?12.Webp格式相比JPE有哪些优势?13.keep-alive 菜单有几级 (一级菜单可以直接实现,二级三级菜单怎么处理?)14.封装了哪些组件?15.css怎么实现垂直居中?16.弹性布局和网格布局的区别?17.讲下原型链?18.原型链下游的东西,可以调用原型链上游的东西吗?19.上游可以调下游吗?20.有2个Promise,并发,怎么操作?21.all()和.race()区别?22.promise的三个状态?23.OSI七层模型24.TCP/IP四层模型25.http协议工作在哪一层?26.Http底层的协议是哪一个?1.2是哪个?2.0是哪个?2.1是哪个?27.git命令,拉代码,git clone28.git更新自己代码,(别人往仓库里上传代码,你怎么更新本地的代码?) git pull29.推送代码 git push30.切换分支
点赞 评论 收藏
分享
评论
4
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务