服务器返回HTTP 304状态码时,服务端代码是否会执行?
关于304状态码下服务端代码是否执行的说明
- 304 Not Modified的核心逻辑是:客户端携带缓存校验头(如
If-Modified-Since、If-None-Match)发起请求,服务端对比资源的最新状态(最后修改时间、ETag),确认资源未变更时返回304,客户端直接使用本地缓存。 - 服务端代码是否执行,取决于304校验逻辑的执行时机:
- 未执行业务代码的场景:如果是服务器(如Nginx、Apache)或开发框架(如Spring、Express)内置的304校验,通常会在进入业务逻辑前完成校验。一旦判定资源未修改,直接返回304,不会触发API端点里的业务代码(比如数据库查询、业务计算)。
- 已执行业务代码的场景:如果是开发者手动实现304逻辑——比如先执行业务代码获取最新数据,再对比ETag/修改时间,发现无变化后返回304——这种情况下,业务代码已经完整执行,只是最终返回的是304状态码且无响应体。
- 优化建议:若想避免不必要的资源消耗,应将304校验逻辑前置,优先利用服务器或框架的原生缓存机制,或在路由入口处先完成校验,再决定是否进入业务逻辑。
内容的提问来源于stack exchange,提问作者tobbe
相关产品推荐
相关产品推荐

