面试题答案
一键面试HTTP协议从客户端发起请求到服务器响应的完整工作流程:
- 建立连接:客户端通过TCP协议与服务器建立连接,三次握手确定连接正常,比如浏览器根据URL解析出IP地址,通过TCP协议与服务器指定端口(常见80或443)建立连接。
- 发送请求:连接建立后,客户端向服务器发送HTTP请求报文,包括请求行(如GET /index.html HTTP/1.1)、请求头(如User - Agent、Accept等),可能还有请求体(POST请求时携带数据)。
- 服务器处理请求:服务器接收到请求后,根据请求的URL和方法等,调用相应的程序逻辑处理请求,比如查询数据库、进行业务计算等。
- 服务器发送响应:服务器处理完请求后,构建HTTP响应报文,包括状态行(如HTTP/1.1 200 OK)、响应头(如Content - Type、Content - Length等),以及响应体(返回的数据,如HTML页面内容)。
- 关闭连接:客户端接收完响应后,根据情况关闭TCP连接,如果是HTTP/1.1默认采用持久连接,可在多次请求响应后关闭;若为HTTP/1.0一般请求响应后即关闭连接。
高并发场景下后端服务器响应延迟的优化方向:
- 优化网络层面:
- CDN加速:在靠近用户的边缘节点缓存内容,减少数据传输距离,比如静态资源(图片、CSS、JS)可通过CDN分发,用户请求时直接从最近的CDN节点获取,减轻后端服务器压力。
- 负载均衡:使用负载均衡器将请求均匀分配到多个服务器上,避免单个服务器过载,常见的负载均衡算法有轮询、加权轮询、最少连接数等。
- 优化服务器端:
- 缓存机制:在服务器端设置缓存,如内存缓存(Redis等),对于频繁访问且不经常变化的数据直接从缓存获取,减少数据库等后端存储的访问压力,提高响应速度。
- 优化代码逻辑:分析业务代码,优化算法和数据结构,减少不必要的计算和I/O操作,比如优化SQL查询语句,减少复杂的JOIN操作等。
- 采用异步处理:对于一些耗时较长且非关键的操作(如日志记录、异步通知等)采用异步处理方式,避免阻塞请求处理线程,提高服务器并发处理能力,可使用消息队列(如Kafka、RabbitMQ)实现异步解耦。
- 优化HTTP协议相关:
- 启用HTTP/2:HTTP/2相比HTTP/1.1有很多性能提升,如多路复用,允许在一个连接上同时处理多个请求和响应,避免线头阻塞;头部压缩,减少数据传输量。
- 合理设置缓存头:在响应头中合理设置缓存相关字段(如Cache - Control、Expires),让客户端和中间代理服务器可以缓存数据,后续相同请求可直接从缓存获取,减少服务器压力。