《C++面试宝典》V1.0 冲刺大厂~持续更新(12)

11 篇文章 2 订阅
2 篇文章 0 订阅

        分享面试总结,涉及C++、算法、数据结构、操作系统、计算机网络、Linux、数据库、设计模式 等,后面持续更新~
        内容多为收集、整理总结,视频、书籍学习所得,如有错误请指出,万分感谢!!!
        ※代表高频问题(参考)

网络篇— √3

参考书籍:谢希仁《计算机网络》
参考博客:HTTP和HTTPS协议,看一篇就够了:
https://blog.csdn.net/xiaoming100001/article/details/81109617?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&dist_request_id=1331645.22395.16184750902220595&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control

http和https了解吗?
http和https的概念:

        http:超文本传输协议(HyperText Transfer Protocol, HTTP)是互联网应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(tcp),用于从服务器传输超文本到本地浏览器(明文传输)的传输协议,它可以使浏览器更加高效,使网络传输减少。
        http特点:
        a) 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,如访问一个网站需要反复进行登录操作
        b) 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。每次需要重新响应请求,耗费不必要的时间和流量。
        c) 基于请求和响应:基本的特性,由客户端发起请求,服务端响应。
        d) 简单快速、灵活。通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性。

        https:是http的安全版,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护。https协议作用:保证数据传输的安全,确认网站的真实性。

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

http和https的区别:
        1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
        2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
        3. http和https使用的是完全不同的连接方式,端口也不一样,前者是80,后者是443。
        4. http的连接很简单,是无状态的。https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
        5. 在OSI模型中,http工作于应用层,而https工作于传输层。

对称加密与非对称加密:
对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方。

非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性。但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

SSL建立连接过程:
在这里插入图片描述

  1. client向server发送请求(如https://baidu.com),然后连接到server的443端口,发送的信息主要是随机值1和客户端支持的加密算法。

  2. server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,该加密算法是client发送给server加密算法的子集(都有)。

        2.1 server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别:自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。

        2.2 客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等。如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(预主秘钥)。

  1. 客户端认证证书通过后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。

  2. 服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。

  3. 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否接受客户端加密的消息。同样,服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端接受,表明SSL层连接建立完成了。

如何防止中间人篡改:
在这里插入图片描述

中间人伪装成服务器端:无权威机构私钥无法加密,强行加密则客户端无法解密。若修改证书内容,会导致证书内容和证书签名不匹配。

中间人伪装成客户端:它向CA寻求认证,CA要求提供域名的whois信息、域名管理邮箱等证明。中间人则无法证明自己是服务器端的拥有者。

如何选择http和https?

  1. SSL证书需要购买申请,功能越强大的证书费用越高。
  2. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
  3. 根据ACM CoNEXT数据显示,使用https协议会使页面的加载时间延长近50%,增加10%到20%的耗电。
  4. https连接缓存不如http高效,流量成本高。
  5. https连接服务器端资源多,支持访客多的网站需要投入更大的成本。
  6. https协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用https协议,有关于用户信息等方面使用https。

http1.0与http1.1的区别?

  1. HTTP1.0需要使用keep-alive参数来告知服务器要建立一个长连接,而HTTP1.1默认支持长连接;
  2. HTTP1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401;
  3. HTTP1.0是没有host域的,HTTP1.1才支持这个参数;
  4. HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级;
  5. HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快;
  6. 对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源。

https的过程?
        一种无状态,以请求、应答方式运行的协议,他使用可扩展的语义和自述描述消息格式、与基于网路的超文本信息系统灵活的互动。

客户端发送一个HTTP请求,HTTP的请求格式如下:
请求行:描述请求或响应的基本信息
请求头:使用key-value形式更加详细的说明报文
空行:
请求数据:实际传输的数据、不一定是文本、可以是图片、视频等二进制数据
在这里插入图片描述
常用头字段:
• 请求字段:请求头中的头字段,但基本可以分为两大类:HOST、Referer
host:标识当前的链接是和哪一个服务建立的: referer来源的判断
• 响应字段:响应头中的字段,如Server,Data
server:哪一种类型的服务器data时间
• 通用字段:在请求头和响应头都可以出现:Content-type,Connection
content-type:请求头了解什么类型的数据connection:

get方法:
示例:
在这里插入图片描述

  1. 根据HTTP规范,GET用于信息获取,而且应该是安全和幂等的。
  2. get是被浏览器自动缓存的,如果下一次传输的数据相同,那么就会返回缓存中的内容,以求更快的传输数据。
  3. get中的URL一般有长度限制,但是需要注意的是HTTP没有规定GET的长度,这个长度限制主要是浏览器和web服务器决定的,并且各个浏览器对长度的限制也各不相同。
  4. get一次产生一个TCP数据包,浏览器会把请求头和请求数据一起出去,服务器响应200 ok。

post方法:
示例:
在这里插入图片描述

  1. post表示可能会改变服务器资源上的请求,例如我们在刷知乎的时候对某篇文章进行点赞就是提交的post请求,因为他改变了服务器中的数据,所以他是不安全的幂等的。
  2. post将请求信息放在请求数据中的,所以它的请求数据没有长度限制。
  3. post会产生两个TCP数据包,浏览器会先将请求头,发送给服务器,待响应100 continue,浏览器再发送请求数据,之后再响应200 ok(返回数据),这么看GET传输是比post快一些,但是实际传输速度基本相同。

两者区别:
在这里插入图片描述
http请求方法
http1.0
get:特定的资源发出请求,本质就是一个发送一个请求来取得服务器的某一资源。
head:发送一个和get请求相一致的响应,不过响应体不会被返回,这一方法不传输整个响应内容,只是为了回去报头。
post:提交数据(例如上传文件),该请求可能会修改数据的内容,会增加数据的种类等等,就像insert一样,创建新的内容。

http1.1新增
put:向服务器发送数据,修改数据的内容但是不会增加数据的种类,就想updata一样。
delete:删除url标识的资源,delete请求后指定资源会被删除,delete也是幂等的。
options:允许客户端查看服务器的性能。
trace:回显服务器收到的请求,主要用于测试或诊断。
patch:对put方法的补充,用来对已知资源的更新。patch出现的比较晚,和put请求类似,同样用于资源的更新,但是有两点不同:

  1. patch用于资源的部分更新,put用于资源的整体更新。
  2. 资源不存在的时候,patch会创建一个新的资源,put只会对已存在资源进行更新。
    connect: HTTP1.1中预留的能够将链接改为管道方法的代理服务器。

过程图:
在这里插入图片描述
http状态码?
1XX 信息码,服务器收到请求,需要请求者继续执行操作
2XX 成功码,操作被成功接收并处理
3XX 重定向,需要进一步的操作以完成请求
4XX 客户端错误,请求包含语法错误或无法完成请求
5XX 服务器错误,服务器在处理请求的过程中发生了错误
详细的请自行扩展~

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值