http面试题

263 阅读6分钟

1.UDP 与 TCP 的区别是什么?

UDP

特点:面向无连接、不可靠、高效、传输方式多

适用场景:实时性较高的比如:直播、视频会议、电话会议等     

TCP

特点:面向链接、可靠传输、拥塞控制、一对一传输

  • TCP 是面向连接的需要在发送数据前进行三次握手建立连接,UDP面向无连接

  • TCP 提供可靠服务。通过 TCP 连接传送的数据,无差错,不丢失,

    不重复,且按序到达;UDP 尽最大努力交付,但不保证可靠交付

  • TCP 只能是 1 对 1 的,UDP 支持1对1,一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

  • TCP 的首部较大为 20 字节,而 UDP 只有 8 字节。

  • UDP 没有拥塞控制,一直以恒定的速度发送数据并且网络出现拥塞不会使得发送速率降低,即使网络条件不好,也不会对发送速率进行调整。网络不好可能会导致丢包,但对实时性要求高的场景(比如电话会议、视频会议等)就需要使用 UDP。

2.http2的特性?有http2后http的哪些优化可以不需要?

特性:

  • 二进制传输:HTTP/1 里是纯文本形式的报文,它的优点是“一目了然”,用最简单的工具就可以开发调试,非常方便。HTTP2采用二进制虽然对人不友好,但却大大方便了计算机的解析。原来使用纯文本的时候容易出现多义性,比如大小写、空白字符、回车换行、多字少字等等,程序在处理时必须用复杂的状态机,效率低,还麻烦。而二进制里只有“0”和“1”,可以严格规定字段大小、顺序、标志位等格式,解析起来没有歧义,实现简单,而且体积小、速度快,做到“内部提效”。
  • 多路复用:解决1.1队头阻塞的问题。HTTP2 会将所有的传输信息分割为更小的数据单位帧,并对他们进行二进制编码。在一个tcp连接中可以发送多个请求对端可以通过帧中的标识知道属于哪个请求。
  • 头部压缩:在HTTP/1.1中,头部字段未被压缩。随着网页数量增长到需要数十到数百个请求,这些请求中的冗余头部字段会占用带宽,从而增加延迟。所以HTTP/2 对头部进行了压缩并开发了专门的“HPACK”算法
  • 服务器端推送

http1的优化不需要:

域名分片、雪碧图等

3.摘要算法和对称加密、非对称加密大概说一下?摘要和加密的区别?知道哪些加密算法?

摘要算法和对称加密、非对称加密

摘要算法:

摘要算法又称哈希算法、散列算法。摘要也称哈希值,表示输入任意长度的数据,都会输出固定长度的数据。通过摘要算法(比如MDS和SHA-1)就可以得到该哈希值。(长度固定,结果越长,认为摘要算法越安全)

换一个角度,也可以把摘要算法理解成特殊的“单向”加密算法,它只有算法,没有密钥,加密后的数据无法解密,不能从摘要逆推出原文。(单项不可逆)

对称加密:加密和解密使用的密钥是同一个

非对称加密:也叫公钥加密算法,有两个密钥一个叫公钥一个叫私钥

摘要和加密的区别:

摘要:

摘要是哈希值,通过散列算法比如MD5算法就可以得到这个哈希值。

摘要只是用于验证数据完整性和唯一性的哈希值

摘要并不是原始数据加密后的密文,只是一个验证身份的令牌。所以我们无法通过摘要解密得到原始数据

加密:

加密是通过 “加密算法” 将 "明文" 加密成 “密文”。 我们可以通过 “密钥” 和 “解密算法” 将 “密文” 还原成 “明文”。

误区:

1、MD5算法是加密算法(X)

2、通过加密算法得到信息摘要 (X)

3、可以对摘要进行解密得到原始数据(X)

加密算法有:

对称加密算法:AES 、ChaCha20

AES:高级加密标准(Advanced Encryption Standard),密钥长度可以是 128、192 或 256。它是 DES 算法的替代者,安全强度很高,性能也很好是应用最广泛的对称加密算法。

ChaCha20 是 Google 设计的另一种加密算法,密钥长度固定为 256 位,纯软件运行性能要超过 AES。

非对称加密算法:RSA、ECC

RSA 可能是其中最著名的一个,几乎可以说是非对称加密的代名词,它的安全性基于“整数分解”的数学难题,使用两个超大素数的乘积作为生成密钥的材料,想要从公钥推算出私钥是非常困难的。10 年前 RSA 密钥的推荐长度是 1024,但随着计算机运算能力的提高,现在 1024 已经不安全,普遍认为至少要 2048 位。

ECC(Elliptic Curve Cryptography)是非对称加密里的“后起之秀”,它基于“椭圆曲线离散对数”的数学难题,使用特定的曲线方程和基点生成公钥和私钥,子算法 ECDHE 用于密钥交换,ECDSA 用于数字签名。

4.说下HTTP 缓存

HTTP 缓存分为强缓存和协商缓存:

1、首先通过 Cache-Control 验证强缓存是否命中,如果强缓存命中,那么直接读取缓存

2、如果没有命中,进入协商缓存,发起 HTTP 请求,服务器通过请求头中是否带上 If-Modified-Since 和 If-None-Match 这些条件请求字段检查资源是否更新:

  • 如果资源有更改,返回200,返回最新的资源。
  • 如果资源没更改,返回304,浏览器读取本地缓存

3、强缓存如果命中不需要和服务器通信,协商缓存需要向服务器询问缓存的相关信息,进而判断是重新发起请求、下载完整的响应,还是从本地获取缓存的资源。

5.说下HTTPS

6.说说 301,302,304 的状态码

7.WebSocket 的实现和应用以及与ajax的区别

未完待续...