计算机网络常用面试题

91 阅读5分钟

GET和POST区别

  • 缓存性:GET请求浏览器有缓存,POST没有
  • 编码性:GET只能进行url编码,只能接收 ASCII 字符,POST没有限制
  • 安全性:GET参数一般在URL中可见,所以说不太安全,而POST方法可以通过加盟来保护数据
  • 幂等性:GET是幂等,POST不是。幂等就是执行n次结果一致。
  • 可用性:GET请求的URL长度有限制(浏览器限制),POST没有限制
  • 请求:POST请求会分两个TCP包,第一次发送header,第二次发送body,(火狐浏览器中一次),GET只发一次

能不能POST换GET呢?

  • GET与POST都有自己的语义,不能随便混用
  • 网络条件好的时候,发一次包和两次包其实影响不大。网络条件不好的时候,在验证数据包的完整性上很棒

DNS解析过程(Domain Name System)

DNS解析是将人类可读的域名转换为计算机可读的IP地址的过程

  • 客户端(浏览器)请求解析一个域名,并向本地的DNS服务器发送请求
  • 本地DNS缓存:本地DNS服务器先检查本地缓存,找不到下一步
  • 询问根域服务器:本地DNS服务器请求根域服务器,返回顶级域名服务器地址列表
  • 询问顶级(TLD)服务器:本地DNS服务器请求顶级域服务器(TLD),找不到下一步
  • 询问权威服务器:本地DNS服务器请求权威域名服务器,返回对应结果
  • 客户端接收答复:本地DNS服务器将结果返回给浏览器
  • 缓存数据:本地DNS服务器将结果缓存
    可以在终端输入dig +trace baidu.com,会依次查找. com. baidu.com.,分别代表查找根、顶级、权威域名服务器。如果配置了cdn,则不会走权威域名服务器,会走智能服务器,就近查找。

比如查询www.baidu.com 的IP地址:

  1. 首先浏览器向本地DNS服务器发起请求,请求解析百度域名
  2. 本地DNS服务器首先会检查其本地缓存,看是否有与百度域名相关的IP地址记录,没有就会
  3. 如果本地DNS服务器没有该缓存信息,那么本地DNS服务器就会去询问根域服务器,以确定www.baidu.com 的TLD服务器(.com)。
  4. 根域名服务器会返回.com的顶级域服务器IP地址列表,本地DNS服务器询问.com TLD服务器
  5. 根据TLD服务器的响应,本地DNS服务器询问www.baidu.com 的权威服务器来获取IP地址
  6. 权威服务器返回最后的IP地址,本地DNS服务器将结果返回客户端
  7. 最后本地DNS服务器把www.baidu.com 的IP地址记录在其本地缓存中

HTTP1.1如何解决HTTP队头阻塞问题

队头阻塞:一个TCP同一时刻只能处理一个请求,后面的请求只能等前面请求完才能进行,如果前面请求一直未响应的话后面就阻塞了

并发连接

  • 浏览器为每个域名最多提供6个TCP连接

域名分片

一举上面的并发连接,那么你可以让1个站点下面的资源放在多个域名下面,比如2个域名你就能同时支持12个TCP连接

HTTP/2的改进

头部压缩

客户端和服务器之间会维护一张哈希表,所有字段会存入其中,利用生成的索引号来交互,对方拿到索引号查就行了

多路复用

将header和body报文拆分成二进制的桢,Headers桢存放头部数据,body桢存放body数据。分桢后,服务器接收的就是一堆乱序的二进制桢了,给同一个请求桢分配相同的streamId,模拟实现了流的传输。(乱序指ID的乱序,同ID的桢还是按顺序)收到桢后,会将相同ID的桢还原,也就是组装成之前的报文。一个域名只建立一个TCP,多个请求都会复用这个通道,通过这个TCP来完成,从而实现多路复用。

服务器推送

TCP连接后,服务器可以主动给客户端推送资源

常用的状态码向向

  • 200 请求成功/命中强缓存
  • 301 永久重定向
  • 302 临时重定向
  • 304 命中协商缓存
  • 400 一般是前端参数错误
  • 401 token过期/未携带token
  • 403 无权限
  • 404 资源未找到
  • 405 请求方法不对,比如GET你用了POST
  • 500 服务器报错

HTTP 和 HTTPS的区别

  • HTTPS需要CA证书,费用比较高;HTTP不需要
  • HTTP是超文本传输协议,明文传输不加密,不太安全;HTTPS则具有安全性的SSL加密传输协议,相对更安全
  • 由于加解密的过程,HTTPS通信速度比HTTP慢
  • HTTP端口80;HTTPS端口443
  • 浏览器会在地址前加不同图标,以区分安全程度

HTTPS通信过程

  1. 客户端发送对称和非对称加密套件列表(告诉服务端支持的加密方式),一个随机数R1(client-random)
  2. 服务端保存随机数,分别选取加密套件,然后把选择套件和随机数R2(service-random)和携带公钥的数字证书发送过去
  3. 客户端会先验证数字证书,然后取出公钥,生成一个随机数R3,根据会话密钥算法使用R1、R2、R3生成会话密钥,用服务端证书的公钥加密随机数R3并发送给服务端
  4. 服务器取出自己的私钥来解密客户端的R3,根据会话密钥算法使用R1、R2、R3生成会话密钥
  5. 客户端和服务端通过会话密钥通信:客户端用会话密钥加密数据,服务端用会话密钥解密,再加密返回值数据,客户端再解密。 参考