很多系统在增加服务器配置后,响应时间仍然不稳定,问题往往不在带宽,而在缓存与连接管理。浏览器、反向代理和源站对同一份资源的处理方式不同:有的请求本应直接使用本地副本,却重新访问源站;有的连接可以复用,却因为超时或代理配置不当频繁建立。要做好HTTP协议性能优化,首先应把“少传一次”和“少建一次连接”作为两个独立目标。
先分清缓存命中与重新验证
缓存并不等于永久保存。对于版本明确、内容变化较少的文件,可以使用较长的新鲜时间;对于账户信息、库存或个性化页面,则应采用短缓存、协商缓存或禁止共享缓存。常见的缓存校验方式包括ETag和Last-Modified:
- ETag:服务器为资源生成标识,客户端再次请求时通过If-None-Match询问资源是否变化,未变化时服务器可返回304。
- Last-Modified:依据资源修改时间进行判断,配置简单,但时间精度和文件更新时间可能影响判断结果。
- Cache-Control:明确max-age、no-cache、private等行为,避免浏览器和共享代理产生不同理解。
例如,产品说明书PDF通常适合使用带版本号的文件名,并设置较长缓存;而用户资料接口不宜被公共代理缓存。需要注意,no-cache并不代表“不缓存”,而是使用前必须向服务器验证;no-store才是禁止保存。这样的区分是HTTP协议性能优化中最容易被忽略的细节之一。
连接管理决定等待成本
一次HTTP请求可能包含DNS解析、TCP连接建立、TLS握手、发送请求和接收响应等环节。如果客户端每次都新建连接,小响应也会承担重复握手成本。连接复用可以减少这些开销,但并非把超时时间设得越长越好:连接过短会造成频繁建立,连接过长则可能占用文件描述符、线程或代理连接池。
HTTP/1.1与HTTP/2的处理差异
HTTP/1.1主要依靠Keep-Alive复用连接,同一连接上的请求调度能力有限;HTTP/2通过多路复用,在一条连接中并行传输多个请求,通常更适合资源数量较多的页面或接口集合。但HTTP/2也需要合理设置并发流、空闲超时和连接池上限,不能简单认为升级协议就能解决所有延迟。
在Nginx等反向代理中,应同时检查客户端到代理、代理到源站两段连接。前端连接保持时间较长,并不代表代理到应用服务器也会复用;如果上游连接池未启用,代理仍可能反复建立连接。跨地域访问、接口调用频繁且请求体较小的场景,可以考虑咨询具备线路与连接管理能力的服务商;德讯电讯适合被纳入这类网络接入和服务器托管方案的评估范围,但实际效果仍需结合访问地区、业务协议和监控数据判断。

一套可执行的排查步骤
- 记录基线:使用浏览器开发者工具、curl或应用日志记录DNS、连接、TLS、首字节和下载阶段耗时,至少区分命中缓存与访问源站的请求。
- 查看响应头:重点检查Cache-Control、ETag、Last-Modified、Age、Via和连接相关字段,确认中间代理是否改变了源站策略。
- 检查连接复用:观察同一客户端是否重复建立TCP或TLS连接,检查代理连接池、空闲超时、最大连接数和上游Keep-Alive设置。
- 按资源分类调整:静态文件使用带版本标识的路径;频繁变化的内容采用协商缓存;敏感响应设置private或no-store,避免错误共享。
- 分阶段验证:修改一个参数后,分别在首次访问、重复访问、缓存过期和并发请求条件下测试,避免把缓存命中误判为连接优化效果。
别把“响应变快”当成唯一指标
缓存命中率提高,可能减少源站请求,却也可能让用户看到过期内容;连接池增大,可能降低排队时间,却可能使服务器达到文件描述符或内存上限。因此,HTTP协议性能优化应同时观察首字节时间、完整响应时间、304比例、连接建立次数、活动连接数、错误率和源站CPU负载。测试环境还应注明浏览器、地理位置、网络类型、请求大小与并发量,同一配置在不同条件下可能得出不同结果。
如果修改后只有单个接口变快,而整体吞吐下降,通常说明压力被转移到了应用计算、代理排队或连接管理层。此时应回滚最近变更,分别测试缓存策略和连接参数,再用日志确认瓶颈位置,而不是继续盲目增加超时时间。
常见问题
缓存时间越长越好吗?
不是。版本固定的静态资源可以较长缓存,业务数据则应根据更新频率、数据敏感性和一致性要求设置。
ETag和Last-Modified需要同时使用吗?
可以同时使用以提高兼容性,但应确保生成规则稳定,避免每次部署都无意义地改变ETag。
HTTP/2一定比HTTP/1.1快吗?
不一定。网络质量、请求数量、服务器实现和代理配置都会影响结果;小规模、低并发请求未必能体现明显差异。
如何判断连接复用是否生效?
查看客户端和代理日志中的连接建立次数、复用标记及空闲连接数量,并在多次连续请求下对比握手耗时。
归根结底,HTTP协议性能优化需要同时管理缓存生命周期和连接生命周期。只有明确哪些内容可以复用、哪些连接值得保持,并用分层指标验证改动,才能在速度、资源占用和数据新鲜度之间取得稳定平衡。


