面试题集合(网络篇)

1. TCP/IP 四层网络模型

第一层:应用层,主要有负责web浏览器的 HTTP 协议, 文件传输的 FTP 协议,负责电子邮件的 SMTP 协议,负责域名系统的 DNS 等。

第二层:传输层,主要是有可靠传输的 TCP 协议,特别高效的 UDP 协议。主要负责传输应用层的数据包。

第三层:网络层,主要是 IP 协议。主要负责寻址(找到目标设备的位置)

第四层:数据链路层,主要是负责转换数字信号和物理二进制信号。

2. 用户输入url到页面展示的过程

  • DNS解析

    域名到真实IP的寻址过程

  • 发起TCP连接

    三次握手🤝,确定 clientserver 双端的接受发送能力

  • 发起Http请求

  • 服务器处理请求并返回HTTP报文

  • 浏览器解析渲染页面

3. 说一下 Http 缓存策略,有什么区别,分别解决了什么问题

浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存;否则,则向服务器发起请求并携带缓存标识。根据是否需向服务器发起HTTP请求,将缓存过程划分为两个部分:强制缓存和协商缓存,强缓优先于协商缓存。

  • 强缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
  • 协商缓存,让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率,将缓存信息中的Etag和Last-Modified通过请求 发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。

HTTP缓存都是从第二次请求开始的:

  • 第一次请求资源时,服务器返回资源,并在response header中回传资源的缓存策略;
  • 第二次请求时,浏览器判断这些请求参数,击中强缓存就直接200,否则就把请求参数加到request header头中传给服务器,看是否击中协商缓存,击中则返回304,否则服务器会返回新的资源。这是缓存运作的一个整体流程图: chrome-cache

4. 常见的Http状态码

  • 200 OK:表示从客户端发送给服务器的请求被正常处理并返回
  • 204 No Content:表示客户端发送给服务端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回)
  • 301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL
  • 302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL
  • 304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码
  • 400 Bad Request:表示请求报文中存在语法错误(一般指参数)
  • 401 Unauthorized:没有经过身份认证,需要通过HTTP认证
  • 403 Forbidden:身份认证过了,但是没有权限
  • 404 Not Found:(客户端问题)请求的资源没有找到,说明客户端错误的请求了不存在的资源
  • 500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时
  • 503 Server Unavailable:服务不可用,一般指维护中或者服务重启中

5. 跨域的复杂请求和简单请求的区别

简单请求

  • HTTP方法是下列之一(HEAD、GET、POST)

  • HTTP头信息不超出以下几种字段

    Accept

    Accept-Language

    Content-Type (application/x-www-form-urlencoded、multipart/form-data、text/plain)

任何一个 不满足上述要求 的请求,即被认为是复杂请求

复杂请求

  • 一个复杂请求不仅有:包含通信内容的请求,同时也包含预请求。

  • 复杂请求表面上看起来和简单请求使用上差不多,但实际上浏览器发送了不止一个请求。其中最先发送的是一种"预请求",此时作为服务端,也需要返回"预回应"作为响应。预请求实际上是对服务端的一种权限请求,只有当预请求成功返回,实际请求才开始执行。

5. TCP和UDP

  • TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
  • 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为
  • 对数据准确性要求高,速度可以相对较慢的,可以选用TCP
  • HTTP3.0取两者之长

Profile

不正经的人机交互工程师