一、HTTP协议核心基础定义
HTTP(HyperText Transfer Protocol,超文本传输协议)是基于TCP 的应用层无状态协议,是Web服务中客户端与服务端通信的标准规范。
- 无状态:服务端不会保存客户端的任何请求信息,每次请求都是独立的,需要通过Cookie、Session、Token实现会话保持(运维开发常涉及会话共享、分布式Session配置)。
- 默认明文传输:数据不加密,易被抓包、篡改、窃听,生产环境必须搭配HTTPS使用。
- 请求-响应模型:客户端主动发起请求,服务端被动响应,是典型的C/S架构通信模式。
- 端口规范 :HTTP默认使用80端口 ,HTTPS默认使用443端口。
二、HTTP报文结构(面试基础必问,运维抓包核心)
HTTP通信的核心是请求报文 和响应报文 ,所有Web交互、线上问题排查,都需要先看懂报文结构。报文均由行 + 头 + 空行 + 体组成,空行是分隔头和体的关键,不可省略。
1. 请求报文(客户端→服务端)
请求行
请求头字段1: 值
请求头字段2: 值
...
(空行)
请求体(可选)
-
请求行 :格式为
请求方法 + 请求URL + 协议版本,例如GET /api/user HTTP/1.1。 -
请求头:运维开发重点关注的核心头字段
字段 作用 运维场景关联 Host 指定请求的目标域名,支持虚拟主机,HTTP1.1强制要求 Nginx虚拟主机配置、多域名代理 Connection 控制连接模式, keep-alive开启长连接,close关闭服务端长连接优化、TCP连接数管控 Content-Type 声明请求体数据格式(application/json、form-data等) 接口请求校验、Nginx请求过滤 Cache-Control 缓存控制,客户端缓存策略 静态资源缓存配置、浏览器缓存排查 Origin 跨域请求中标识请求源 跨域问题排查、CORS配置 User-Agent 标识客户端设备、浏览器、系统信息 爬虫拦截、访问统计、兼容性适配 -
请求体:GET、HEAD方法通常无请求体;POST、PUT、PATCH、DELETE方法携带请求参数,用于提交数据。
2. 响应报文(服务端→客户端)
状态行
响应头字段1: 值
响应头字段2: 值
...
(空行)
响应体(可选)
- 状态行 :格式为
协议版本 + 状态码 + 状态描述,例如HTTP/1.1 200 OK,状态码是运维排查线上问题的核心依据。 - 响应头 :运维核心关注缓存、跨域、连接相关字段,如
Cache-Control、ETag、Last-Modified、Access-Control-Allow-Origin、Keep-Alive等。 - 响应体:服务端返回的业务数据、HTML、静态资源等内容。
三、HTTP请求方法(重点考幂等性,运维接口重试、负载均衡核心)
运维开发关注方法的幂等性,直接影响接口重试、负载均衡转发、数据一致性设计。幂等性:同一请求执行一次和多次,服务端结果一致。
| 方法 | 核心作用 | 幂等性 | 运维开发重点 |
|---|---|---|---|
| GET | 获取服务端资源 | 是 | 可缓存、可重试,参数在URL,会被日志、代理记录 |
| POST | 提交数据,新增资源 | 否 | 不可缓存、不可随意重试,参数在请求体,安全性更高 |
| PUT | 更新完整资源 | 是 | 全量更新,幂等,适合接口幂等设计 |
| DELETE | 删除资源 | 是 | 资源删除操作,幂等 |
| HEAD | 仅获取响应头,无响应体 | 是 | 运维用于探活、校验资源存在性,降低带宽消耗 |
| OPTIONS | 跨域预检请求,获取服务端支持的方法 | 是 | 解决CORS跨域,Nginx需配置允许预检请求 |
| PATCH | 局部更新资源 | 否 | 增量更新,非幂等 |
高频面试题:GET和POST的核心区别(运维视角)
- 参数位置:GET参数拼接在URL,POST参数放在请求体。
- 安全性:GET参数易被代理、日志、浏览器历史记录泄露,POST更安全。
- 数据长度:GET受URL长度限制,POST无理论上限。
- 缓存与幂等:GET支持缓存、幂等;POST默认不缓存、非幂等。
- 运维场景:GET适合静态资源、查询接口;POST适合表单提交、敏感数据、大体积数据传输。
四、HTTP状态码(运维开发面试TOP考点,线上问题排查核心)
状态码分为5大类,运维重点关注3xx重定向、4xx客户端错误、5xx服务端错误,是排查Nginx、网关、应用服务异常的第一依据。
1. 1xx 信息性状态码(临时响应,极少关注)
仅用于协议交互,如100 Continue,表示客户端可继续发送请求体。
2. 2xx 成功状态码
200 OK:请求处理成功,最常见的正常响应。204 No Content:请求成功,但无响应体,运维常用于接口探活、心跳检测。201 Created:资源创建成功,多用于POST新增接口。
3. 3xx 重定向状态码(缓存+域名迁移核心)
301 Moved Permanently:永久重定向,浏览器会缓存重定向地址,利于SEO,运维用于域名永久迁移、路径永久修改。302 Found:临时重定向,浏览器不缓存重定向地址,运维用于临时切流、灰度发布。304 Not Modified:协商缓存命中,服务端验证资源未更新,直接返回304,客户端读取本地缓存,减少服务端压力和带宽消耗,是运维优化静态资源的核心。
4. 4xx 客户端错误(请求本身问题,非服务端故障)
400 Bad Request:请求报文格式错误,参数非法、报文不完整。401 Unauthorized:未认证,缺少Token、Cookie等身份凭证。403 Forbidden:权限不足,服务端拒绝访问,如IP黑名单、目录权限限制。404 Not Found:请求资源不存在,URL错误、服务未部署、路径配置错误。405 Method Not Allowed:请求方法不被服务端支持,如接口仅支持GET,客户端用POST请求。413 Payload Too Large:请求体过大,运维需调整Nginx、Tomcat的上传大小限制。
5. 5xx 服务端错误(运维核心排查项,线上故障高发)
500 Internal Server Error:服务端代码异常,如空指针、数据库报错、代码Bug。502 Bad Gateway:网关层(Nginx、Apache)收到后端服务无效响应,后端服务崩溃、端口不通、报文格式错误。503 Service Unavailable:服务端暂时不可用,如服务过载、停机维护、限流熔断。504 Gateway Timeout:网关请求后端超时无响应,后端服务响应慢、数据库慢查询、线程池耗尽、网络延迟。
五、HTTP版本演进(运维关注性能、连接优化)
面试常考各版本核心差异,以及运维层面的优化配置,重点解决TCP连接开销、队头阻塞问题。
- HTTP1.0 :短连接模型,一次请求建立一次TCP连接,请求完成后立即断开,频繁三次握手、四次挥手,TCP开销极大,不支持虚拟主机、长连接。
- HTTP1.1 :运维最常用的版本,核心优化
- 默认开启
Connection: keep-alive长连接,一个TCP连接可处理多个请求,大幅降低TCP开销。 - 支持虚拟主机(Host头)、分块传输、管线化,解决HTTP1.0的核心缺陷。
- 缺陷:存在队头阻塞,一个TCP连接同一时间只能处理一个请求,前一个请求阻塞,后续请求全部等待。
- 默认开启
- HTTP2.0 :二进制分帧传输,核心优化
- 多路复用:一个TCP连接可并行传输多个请求,彻底解决HTTP1.1的队头阻塞。
- 头部压缩、服务器推送,提升传输效率,降低带宽消耗。
- HTTP3.0:基于QUIC协议(UDP传输),彻底摆脱TCP的队头阻塞,连接建立更快,内置加密,兼容性仍在完善,生产环境使用较少。
六、HTTP缓存机制(运维+开发高频,静态资源优化核心)
缓存是Web性能优化的核心手段,运维主要负责Nginx缓存配置、缓存策略落地 ,开发负责缓存逻辑适配,面试必考强缓存+协商缓存。
缓存优先级:强缓存 > 协商缓存,强缓存生效则直接读取本地缓存,不请求服务端;强缓存失效则发起协商缓存校验。
1. 强缓存
无需与服务端交互,直接使用本地缓存,响应头控制。
Expires:HTTP1.0标准,声明缓存的绝对过期时间,依赖客户端本地时间,易出现时间同步问题。Cache-Control:HTTP1.1标准,优先级高于Expires,运维Nginx配置核心。
常用值:max-age=xxx(缓存有效时长,秒)、public(所有节点可缓存)、private(仅客户端缓存)、no-cache(跳过强缓存,直接走协商缓存)、no-store(禁止任何缓存,敏感接口使用)。
2. 协商缓存
强缓存失效后,客户端请求服务端,验证资源是否更新,通过响应头+请求头配对实现。
ETag / If-None-Match:资源唯一指纹,优先级更高,文件内容修改则指纹变化,校验通过返回304。Last-Modified / If-Modified-Since:资源最后修改时间,校验通过返回304,失败返回200+新资源。
七、跨域问题(运维开发结合考点,生产落地核心)
1. 同源策略
浏览器的安全策略,协议、域名、端口三者完全一致才是同源,否则触发跨域,禁止读取跨域资源的响应数据。
2. 运维主流解决方案
- Nginx反向代理:生产环境首选方案。通过Nginx将跨域请求转发到同域名下,规避浏览器同源限制,无需修改服务端代码,运维只需配置Nginx代理规则。
- CORS跨域资源共享 :服务端配置响应头,允许指定源跨域访问,核心响应头:
Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers。 - JSONP:仅支持GET请求,兼容性好,场景受限,运维场景极少使用。
八、HTTPS与HTTP核心区别(面试必问,运维部署核心)
HTTPS是HTTP+SSL/TLS的加密协议,解决HTTP明文传输的安全问题,是生产环境的强制要求。
- 传输安全性:HTTP明文传输,易被窃听、篡改;HTTPS通过SSL/TLS实现加密传输,数据不可破解。
- 端口差异:HTTP默认80,HTTPS默认443。
- 连接流程:HTTPS在TCP三次握手后,增加TLS握手流程,完成证书验证、加密套件协商、密钥交换。
- 运维成本:HTTPS需要申请SSL证书,运维需完成证书部署、续期、加密套件优化、TLS版本配置;HTTP无额外成本。
- 性能损耗:HTTPS存在TLS握手开销,可通过会话复用、HTTP2.0优化。
九、运维开发高频实战面试题&排查思路
这部分是运维岗区别于开发岗的核心考点,聚焦线上问题排查、服务配置、故障定位。
- 502和504的排查思路?
- 502:先检查后端服务是否正常启动、端口是否监听、telnet/curl连通性;再排查应用是否返回异常报文、进程是否崩溃、网络链路是否中断。
- 504:先查看后端服务响应耗时,排查数据库慢查询、Redis阻塞、应用线程池耗尽;再检查防火墙、网络延迟、Nginx超时配置是否合理。
- Keep-Alive长连接的优缺点,运维如何配置?
- 优点:减少TCP握手挥手开销,提升并发性能,降低服务端连接数压力。
- 缺点:空闲长连接会占用服务端文件句柄、内存资源。
- 运维配置:在Nginx、Tomcat、Apache中配置
keepalive_timeout,设置长连接空闲超时时间,自动释放闲置连接。
- 301和302重定向的区别,生产如何选择?
- 301永久重定向:浏览器缓存重定向地址,利于SEO,适合域名、路径永久迁移。
- 302临时重定向:浏览器不缓存,适合临时切流、灰度发布、维护跳转。
- 运维如何抓包分析HTTP问题?
- 服务器端:使用
tcpdump抓取80/443端口流量,导出报文后用Wireshark解析。 - 客户端:使用Chrome开发者工具、Fiddler,查看请求响应报文、状态码、耗时、缓存状态。
- 服务器端:使用
- 什么是队头阻塞?HTTP1.1/2如何解决?
- HTTP1.1单TCP连接串行处理请求,前一个请求阻塞,后续请求全部等待,即队头阻塞。
- HTTP2通过二进制分帧+多路复用,实现单连接并行传输,解决TCP层队头阻塞;HTTP3基于UDP+QUIC,彻底解决队头阻塞。
我可以帮你把这些知识点整理成精简版面试背诵清单,剔除冗余内容,只保留高频考点和答题话术,方便你快速记忆。