Skip to content

计网相关面试题

1. 什么是 HTTP?

HTTP 全称超文本传输协议(HyperText Transfer Protocol),是一个用于传输超文本(例如 HTML)的应用层协议。基于 TCP 协议,默认端口号是 80。

HTTP 的工作原理是客户端向服务器发送请求,服务器接收到请求后,返回响应。

HTTP 请求报文内容包括:请求行、请求头、请求体。请求头和请求体之间用一个空行分隔。

  • 请求行:包括请求方法、请求 URL、协议版本
  • 请求头:键值对的形式,是一些附加的信息如 CookieUser-AgentContent-Type
  • 请求体:请求的内容,如 POST 请求的参数

HTTP 响应报文内容包括:状态行、响应头、响应体。响应头和响应体之间用一个空行分隔。

  • 状态行:包括协议版本、状态码、状态描述信息
  • 响应头:键值对的形式,是一些附加的信息如 Set-CookieContent-Type
  • 响应体:响应的内容,如 HTML、JSON、图片视频二进制数据等

2. HTTP 和 HTTPS 有什么区别?如何实现 HTTPS?

  • 安全性:HTTP 是超文本传输协议,是明文传输的,安全性较差。HTTPS 是在 HTTP 的基础上加入了 SSL/TLS 协议,是安全的 HTTP。
  • 端口:HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
  • 证书:HTTPS 需要向 CA 机构申请证书,而 HTTP 不需要。

实现 HTTPS 的步骤:

  1. 生成和获取证书
  2. 配置服务器
  3. 开启 HTTPS
  4. 重启服务器

3. TCP 为什么需要三次握手和四次挥手?少一次和多一次行吗?

首先 TCP 三次握手的过程为:

  1. 客户端发送 SYN 包(SYN=1, seq=x)给服务器,进入 SYN-SENT 状态
  2. 服务器接收到 SYN 包,回应一个 SYN/ACK 包(SYN=1, ACK=1, seq=y, ack=x+1),进入 SYN-RECEIVED 状态
  3. 客户端接收到 SYN/ACK 包,回应一个 ACK 包(ACK=1, seq=x+1, ack=y+1),进入 ESTABLISHED 状态

服务器在第二次握手的时候,会分配 TCP 缓冲区。而客户端在第三次握手的时候,才会分配 TCP 缓冲区。

三次握手的目的就是建立可靠的连接

如果只靠二次握手建立连接,假如发生了这样一种情况,客户端发送的 SYN 报文段由于超时而失效,服务器接收后,误以为客户端要建立连接,因此向客户端发送确认报文段,但由于客户端此时不想建立连接,故不理睬服务器的确认。如果只有两次握手,那么服务器就会认为连接已经建立,一直等待客户端的数据发送,从而浪费服务器的资源。采用三次握手可以防止这种情况。

4. HTTP 状态码 301 和 302 的区别

KB-野原新之助 —— HTTP状态码301和302的区别详解

最近更新于:

Released under the MIT License