大家好 我是积极向上的湘锅锅💪💪💪
希望小伙伴们秋招一起上岸👫👫👫
网络篇
1. Get和Post的区别
从用途上看:
- 首先根据我们的HTTP的restfu风格来说,Get是向服务器请求资源,比如我向服务器请求一个菜单栏
- 而Post是用途是向服务器提交资源,比较常见的场景为登录注册
从提交方式上看:
- Get是将我们的参数拼接在URL里面
- Post是将参数放在消息体或者请求头中
从传输数据的大小限制看:
- Get因为是将参数以拼接的方式放在URL里面,所以理应上长度是受浏览器限制的
- Post参数放在消息体或者请求头中,所以按理来说长度大小没有限制
从缓存来看
- Get可以被浏览器缓存做为标签
- Post不可以被浏览器缓存也不可以做为标签
2. 说说HTTP、TCP、Socket 的关系是什么
- HTTP 本身就是一个协议,是从 Web 服务器传输超文本到本地浏览器的传送协议
- TCP 是一种允许我们安全传输数据的机制,使用 TCP 协议来传输数据的 HTTP 是 Web 服务器和客户端使用的特殊协议。
- Socket 是 TCP/IP 网络的 API ,其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在Socket 接口后面。对用户来说,一组简单的接口就是全部,让 Socket 去组织数据,以符合指定的协议
关系:首先要使用HTTP协议对数据进行封装或者识别,而通过Socket提供的接口,才能使用TCP协议进行一个数据的安全传输
3. 浏览器中输入:“www.woaijava.com”之后都发生了什么?请详细阐述
- 由域名→IP地址:寻找IP地址的过程依次经过了浏览器缓存,系统缓存,hosts文件,路由器缓存,递归搜索根域名服务器
- 建立TCP/IP连接
- 由浏览器发送一个HTTP请求
- 服务器处理该HTTP请求,返回一个HTML文件
- 浏览器解析该HTML文件,并且显示在浏览器端
注意:
HTTP协议是一种基于TCP/IP的应用层协议,进行HTTP数据请求必须先建立TCP/IP连接
可以这样理解:HTTP是轿车,提供了封装或者显示数据的具体形式,Socket是发动机,提供了网络通信的能力
4.说一说HTTP与TCP/IP的关系?
- HTTP的长连接和短连接其实都是TCP的长连接和短连接,HTTP是基于TCP协议的,因为TCP已经做的事情够多了,所以在应用层使用HTTP通信,所以HTTP相比之下只是多加了一层规矩,这个规矩让用户更清晰,更简洁
- HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。
- IP协议主要解决网络路由和寻址问题,
- TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的
5.说说域名解析详细过程?
- 浏览器访问 www.baidu.com,首先询问本地的DNS服务器是否缓存了该网址解析后的IP地址
- 如果本地没有的话,就去去 root-servers.net根服务器查询该网址的对应的IP地址
- 根服务器返回顶级域名服务器的网址gtld-servers.net,然后本地DNS服务器去顶级域名服务器查询该网址对应的IP地址
- 顶级域名服务器返回 www.baidu.com 主区域服务器的地址,然后本地DNS服务器去www.baidu.com主区域服务器查询此域名对应的IP地址
- 本地 DNS 服务器拿到 www.baidu.com 解析后的 IP 地址后,缓存起来以便备查,然后把解析
后的 IP 地址返回给浏览器。
6.HTTP 响应码有哪些?分别代表什么含义?
- 200:成功,Web 服务器成功处理了客户端的请求。
- 301:永久重定向,当客户端请求一个网址的时候,Web 服务器会将当前请求重定向到另一个
网址,搜索引擎会抓取重定向后网页的内容并且将旧的网址替换为重定向后的网址。 - 302:临时重定向,搜索引擎会抓取重定向后网页的内容而保留旧的网址,因为搜索引擎认为
重定向后的网址是暂时的。 - 400:客户端请求错误,多为参数不合法导致 Web 服务器验参失败。
- 404:未找到,Web 服务器找不到资源。
- 500:Web 服务器错误,服务器处理客户端请求的时候发生错误。
- 503:服务不可用,服务器停机。
- 504:网关超时。
7、端到端、点到点的区别?
数据传输的可靠性是通过数据链路层和网络层的点对点和传输层的端对端保证的。端到端与点到点是针对网络中传输的两端设备间的关系而言的。
端到端通信是针对传输层来说的。它是一个网络连接,指的是在数据传输之前,在发送端与接收端之间(忽略中间有多少设备)为数据的传输建立一条链路,链路建立以后,发送端就可以发送数据,知道数据发送完毕,接收端确认接收成功。 也就是说在数据传输之前,先为数据的传输开辟一条通道,然后在进行传输。从发送端发出数据到接收端接收完毕结束。
点到点通信是针对数据链路层或网络层来说的。点对点是基于 MAC 地址或 IP 地址。指一个设备发数据给与该该设备直接连接的其他设备,这台设备又在合适的时候将数据传递给与它相连的下一个设备,通过一台一台直接相连的设备把数据传递到接收端。
HTTP篇
1. 说一下HTTP的长连接与短连接的区别
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接
-
短连接
在HTTP1.0中默认使用短连接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接,如果客户端访问的某个HTML或其他类型的Web资源,比如css文件等,就建立一个HTTP会话 -
长连接
从HTTP1.1起,默认使用长连接,用以保持连接特性,在使用长连接的情况下,当TCP连接完成后,不会马上关闭,如果客户端再次访问服务器资源,还会继续使用这一条已建立的连接,Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间
区别:最大的区别就是短连接在请求资源完成后,会立马断开连接,而长连接不会,会保持Keep-Alive状态,客户端可以重复利用此连接
2. 长连接和短连接的优缺点?
- 长连接
优点:长连接可以省去较多的TCP建立连接和关闭的操作,减少不必要的网络开销,对于那些频繁请求的客户端来说长连接比较合适
缺点:但是也存在一个问题,客户端一般不会主动关闭它们之间的连接,如果一直不关闭,那客户端连接越来越多的情况下,服务端早晚会扛不住,所以我们要采取一些策略,比如关闭一些长时间没有读写事件发生的连接,或者限制每一个客户端的最大连接数等来保证我们服务端的正常工作 - 短连接
优点:短连接的话就不会有如上的问题,管理相对简单,在请求完资源之后会断开连接,存在的连接都是有用的连接
缺点:但是存在的问题也就是客户端频繁请求资源的话,要多次进行TCP的建立和关闭操作上浪费时间和带宽
3. HTTP1.0、HTTP1.1、HTTP2.0的关系和区别
HTTP1.0 :
- 无状态,无连接
浏览器每次请求都需要和服务器建立一个连接,服务器处理完之后断开连接,客户端再次重新请求资源时,需要再次建立连接
HTTP1.1 :
- 持久连接
- 请求管道化
- 增加缓存处理
- 增加Host字段,支持断点传输
默认使用长连接,避免了额建立和释放的开销。但是服务器必须按照客户端请求的顺序依次返回相应的结果,才能保证客户端能够区分出每次请求的响应内容,不允许同时存在俩个并行的响应
HTTP2.0 :
- 二进制分帧
- 多路复用
- 头部压缩
- 服务器推送
多路复用:
HTTP2.0引入二进制数据帧和流(stream)的概念,其中帧对数据进行顺序标识,在传输数据的过程中,每一个数据流以消息的形式发送,而消息由一个或者多个帧组成,这些帧可以乱序发送,然后再根据每个帧头部的流(stream)重新组装
流(stream)相当于是一个管道,是已建立连接上的双向数据流
另外,多路复用可能会导致关键请求被阻塞。HTTP2.0里每个数据流都可以设置优先级和依赖,优先级高的数据流会被服务器优先处理和返回给客户端,数据流还可以依赖其他的子数据流
当然,HTTP2.0的多路复用实现了真正的并行传输,解决了HTTP层面的队头阻塞的问题,但是因为只有一个TCP连接,如果发生丢包,那就会导致TCP层面的队头阻塞问题,在QUIC协议里已经解决
头部压缩:
在HTTP1.x中,头部元数据都是以纯文本的形式发送的,通常会给每个请求增加500~800字节的负
荷。
HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,
既避免了重复header的传输,又减小了需要传输的大小。高效的压缩算法可以很大的压缩
header,减少发送包的数量从而降低延迟
服务器推送:
服务器除了对最初请求的响应外,服务器还可以额外的向客户端推送资源,而无需客户端明确的请
求
HTTPS篇
为了解决HTTP中存在的数据安全问题,HTTPS通过对称加密,非对称加密,数字证书和数字签名的方式来保证
1. HTTP 和 HTTPS 的区别
- 端口号不同:HTTP默认是80,HTTPS默认是443;
- 消耗资源:HTTPS因为在会话层比HTTP多了SSL/TSL握手,需要加密和解密,所以需要更多的CPU和内存资源
- 开销:HTTPS 通信需要证书,这类证书通常需要向认证机构申请或者付费购买
2. HTTPS对称加密的优缺点
- 基本概念 :客户端和服务端共用一个相同的钥匙进行加解密,叫做对称加密,在客户端用这个公钥将消息加密之后,服务器端再用这个公钥进行解密
- 优点:保证了消息传递过程中的保密性
- 缺点:因为这个钥匙是公用的,很容易被第三方窃取,所以很难保证消息来源的可靠性,消息的完整性和可靠性
3. HTTPS非对称加密的优缺点
-
基本概念:既然对称加密使用的都是同一把钥匙,那采用不同钥匙来解决,即客户端和服务端各有一把公钥和私钥,私钥只有服务端有,其他客户端持有的都是公钥,公钥用公钥加密的消息只能私钥进行解密,而私钥进行加密的消息只能公钥进行解密,所以整个非对称加密的过程如下:
客户端用公钥进行加密,服务端用自己的私钥进行解密 服务端用自己的私钥进行加密,客户端用公钥进行解密
-
优点:采用非对称加密,即公钥加密的消息只能私钥解密等特性,所以较大程度上保证了消息的来源性以及消息的准确性和完整性,而且使得私有密匙泄露的风险降低
-
缺点:非对称加密过程中公钥是任何人都可以拿到,所以会存在俩个问题:
中间人可以截取公钥,然后用公钥解密服务器发送的消息 中间人可以获取客户端发过来的消息,可以进行篡改,然后再用公钥加密发送回客户端,服务端收到的就是错误的消息
而且非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源
4. 那以上的方式都有优缺点,那现在HTTPS整个连接过程是怎么样的?
首先我们知道不管是对称加密还是非对称加密,都有其优缺点,所以HTTPS通过对称加密,非对称加密,数字证书和数字签名的方式来保证,值得注意的是在只有在内容传输得加密的过程中才会采用对称加密,而非对称加密只会发生在建立连接阶段,所以整个过程如下:
-
客户端发起握手请求,请求到达默认的443端口
-
服务端接收到请求之后,本地生成一对公钥和私钥,然后拿着自己的公匙以及其他信息(比如企业信息等)然后去CA申请数字证书,申请过程如下:
首先CA再拿到这些信息之后,采用单向hash算法(如md5)进行加密,加密后的信息称为摘要 然后CA会再用自己的私钥对摘要进行加密,摘要加密后的数据叫做数字签名 最后CA会将我们的申请信息和数字签名,一起生成数字证书,发送回服务端,服务端再发给客户端
-
客户端就需要用CA的公匙解密数字证书并验证数字证书的合法性,那我们如何能拿到CA的公匙呢?我们的电脑和浏览器中已经内置了一部分权威机构的根证书,这些根证书中包含了CA的公匙
客户端用CA的公匙解密数字证书,解密成功则说明证书来源于合法的认证机构 解密失败则说明证书来源于不合法的第三方,然后发出警告 然后客户端会按照和CA一样的Hash算法将申请信息生成一份摘要,并和解密出来的那份做对比,如果相同则说明内容完整,没有被篡改
第一保证证书来源合法
第二保证证书的内容没有被篡改 -
检验证书合法性之后,客户端随机生成一个长整数,这个长整数用公钥加密,加密之后就发送至服务器
-
服务器用私钥解密,拿到了之后进行数据交换时用于对称加密的秘钥。这个秘钥就是以后进行真正数据交换的秘钥了
-
最后开始数据传输,在传输过程中都是这个公钥进行加解密(对称加密),就要比非对称加密的性能高上不少