首页 > 《C++面试宝典》V1.0 冲刺大厂~持续更新(12)
头像
许嵩不爱吃土豆鸭
编辑于 2021-04-19 19:33
+ 关注

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

分享面试总结,涉及C++、算法、数据结构、操作系统、计算机网络、Linux、数据库、设计模式等后面持续更新~

内容多为一问一答式,多数来自收集。整理总结,视频、书籍学习所得,如有错误请指出,万分感谢!!!
学习建议:针对八股文,不太了解的可以网上扩展,自己总结,拿来主义最好能消化成自己的。
※代表高频问题(参考)

# 网络篇---  √3

参考书籍:谢希仁《计算机网络》
参考博客:HTTP和HTTPS协议,看一篇就够了:

http和https了解吗?

1) httphttps的概念:


http超文本传输协议(HyperText Transfer Protocol, HTTP)是互联网应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(tcp),用于从服务器传输超文本到本地浏览器(明文传输)的传输协议,它可以使浏览器更加高效,使网络传输减少。

http特点:

a) 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,如访问一个网站需要反复进行登录操作

b) 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。每次需要重新响应请求,耗费不必要的时间和流量。

c)        基于请求和响应:基本的特性,由客户端发起请求,服务端响应。

d)       简单快速、灵活。通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性。

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

https特点:

a)        内容加密:采用混合加密技术,中间者无法直接查看明文内容。

b)        验证身份:通过证书认证客户端访问的是自己的服务器。

c)        保护数据完整性:防止传输的内容被中间人冒充或者篡改。


2) httphttps的区别

a)        https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

b)        http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

c)        http和https使用的是完全不同的连接方式,端口也不一样,前者是80,后者是443。

d)       http的连接很简单,是无状态的。https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

e)        在OSI模型中,http工作于应用层,而https工作于传输层。

3)对称加密与非对称加密:


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

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

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

SSL建立连接过程:



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

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

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

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

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

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

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


如何防止中间人篡改:


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

2. 中间人伪装成客户端:它向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状态码

1)        1XX    信息码,服务器收到请求,需要请求者继续执行操作

2)        2XX    成功码,操作被成功接收并处理

3)        3XX    重定向,需要进一步的操作以完成请求

4)        4XX    客户端错误,请求包含语法错误或无法完成请求

5)        5XX    服务器错误,服务器在处理请求的过程中发生了错误
详细的请自行扩展~

未完待续~

需资料分享,可私聊哈



全部评论

(1) 回帖
加载中...
话题 回帖

相关热帖

热门推荐