Android面试之网络请求

写在正文前面的话

有的人永远留在这个寒冬,只为更多人迎来春天,🕯️🕯️🕯️逝者安息。

年前离职,本想着年后好找工作,谁知道赶上疫情,直到3月份才开始找工作,因为疫情原因,大多数的面试都是线上面试。在这个特殊时期,有些变化是之前没有想到的,不敢过程是多么坎坷,总归结果还是好的,找了心意的工作。加油!
下面开始总结面试总结的知识点:

需要了解更多的请点击这里

整理的思维导图
整理的思维导图

网络请求http和https

http: 超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
https: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
如下图所示:
https://user-gold-cdn.xitu.io/2020/3/1/17095bb260b74d32?imageslim

http和https区别

  • https需要CA证书,需要一定的费用。
  • http采用超文本协议,一般使用明文传递,Https有安全协议ssl加密传输协议。
  • 采用的端口不一样:http:80;https:443。
  • http是无状态的,Https+ssl对信息进行加密,身份验证更加安全。
  • Http建立连接的速度比https要快,因为Https除了三次握手还需要ssl握手。

Http1.1和Http1.0及2.0的区别?

HTTP1.0和HTTP1.1的一些区别

HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:

  • 缓存处理 ,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  • 带宽优化及网络连接的使用 ,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  • 错误通知的管理 ,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  • Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  • 长连接,HTTP1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
SPDY: http1.x的优化方案
  • 降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing) 多路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。
  • 请求优先级(request prioritization) 多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。
  • header压缩 前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
  • 基于HTTPS的加密协议传输,大大提高了传输数据的可靠性
  • 服务端推送(server push) 采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。
HTTP2.0和HTTP1.X相比的新特性
  • 新的二进制格式 HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
  • 多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。 一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
  • header压缩 如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
  • 服务端推送(server push) 同SPDY一样,HTTP2.0也具有server push功能。

https的加密原理

加密算法的类型基本上分为了两种:

  • 对称加密,加密用的密钥和解密用的密钥是同一个,比较有代表性的就是 AES 加密算法;
  • 非对称加密,加密用的密钥称为公钥,解密用的密钥称为私钥,经常使用到的 RSA 加密算法

https ssl加密过程简化版

  • 客户端发送协议版本号,一个随机数和支持的加密方式。
  • 服务端确认加密方式,发送数字证书携带一个随机书b。
  • 客户端确认数字证书有效,使用公钥对一个随机数c进行加密,然后发送给服务器。
  • 服务器使用私钥对c进行解密。
  • 客户端和服务器使用约定好的加密方式,对随机数ABC,生成密钥,以后通话就使用这个密钥。

tcp和udp的区别

  • TCP面向连接UDP是无连接的。
  • TCP提供可靠的服务。TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
  • TCP面向字节流,UDP是面向报文的 (对实时应用很有用,如IP电话,实时视频会议等)。
  • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
  • TCP首部开销20字节;UDP的首部开销小,只有8个字节。
  • TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

三次握手简化版

  • 第一次握手:客户端发送SYN seq= x;
  • 第二次握手:服务端接收到客户端发来的SYN,并发送给客户端SYN seq= y ,ack=x+1;
  • 第三次握手:客户端接收到服务端发送的信息,发送给服务端ACK = y+1;

四次挥手简化版

  1. 客户端向服务器端发送 FIN seq = x+2;
  2. 服务端收到FIN字段之后,服务端向客户端回了一个ACK seq = x+3。
  3. 服务端向客户端发送 FIN seq = y+1,请求关闭连接 。
  4. 客户端收到服务端发送的FIN字段,客户端向服务端发送ACK seq= y+2,服务端接收到ack字段,关闭连接,客户端发送ack字段后会等待服务端的消息,如果超过等待时间,就会关闭连接,四次挥手完成

写在最后的话

计算机网络这块还是比较薄弱,在后续还要花费精力去学习,尽量做到知其然而知其所以然。加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值