博客
关于我
Nginx - Header详解
阅读量:789 次
发布时间:2023-02-15

本文共 1933 字,大约阅读时间需要 6 分钟。

HttpHeadersModule 模块:HTTP 头设置与缓存机制

前言

通过 HttpHeadersModule 模块,可以对HTTP响应头进行设置。这种设置主要用于控制缓存行为,但需要注意以下几点:

  • 不能重写已存在的头(如 Last-Modified),只能添加新的头。
  • 设置的有效性依赖于HTTP状态码,仅在200、204、301、302或304状态下生效。
  • Cache-Control 相比,expires 的优先级较低,且两者可以共存,但 Cache-Control 的效果优先。
  • HttpHeadersModule 模块

    2.1 指令

    add_header 指令

    • 语法add_header name value
    • 默认值:无
    • 使用环境httpserverlocation
    • 功能:为HTTP响应添加自定义头。

    expires 指令

    • 语法expires [modified] time | epoch | max | off;
    • 默认值expires off
    • 使用环境httpserverlocationif in location
    • 功能
      • off:阻止修改 ExpiresCache-Control 头。
      • max:设置 Expires 为2037年,并将 Cache-Controlmax-age 设为10年。若设置为时间值或非负数,max-age 会转换为秒数。
    • 注意expires 优先级低于 Cache-Control

    2.2 缓存机制

    Cache-Control

    • 定义:控制缓存机制。
    • 常见取值
      • no-cache:数据不可缓存,每次请求重新获取。
      • no-store:不允许缓存,包括临时存储。
      • private:仅在浏览器缓存,第一次请求后不重新获取(若有 max-age)。
      • public:可在所有缓存区存储。
      • max-age:缓存时间(秒)。

    Last-Modified

    • 功能:记录资源的最后修改时间。
    • 工作流程:1.客户端第一次请求,服务器返回 Last-Modified 头。2.客户端在下一次请求时,发送 If-Modified-Since 头,询问是否有修改。3.服务器判断是否有修改,如果无修改返回 304 Not Modified

    ETag

    • 功能:为资源生成实体标记。
    • 工作原理:1.客户端收到 ETag 后,下一次请求发送 If-None-Match 头。2.服务器检查 ETag 是否匹配,如果不匹配返回 304
    • 注意:在分布式系统中,ETag 不建议使用,因其可能导致比对失败。

    2.3 缓存机制优化

    expires 与 Cache-Control

    • 优先级Cache-Control 高于 expires
    • 注意:在配置中,Cache-Controlmax-age 优先生效。

    Last-Modified 与 expires

    • 组合使用Last-Modified 主要用于减少数据传输量,而 expires 控制缓存期限。
    • 客户端行为
      • 按下刷新键,会发送新的 HTTP 请求。
      • 手动关闭浏览器或切换标签页,会清空缓存。

    ETag 与 Last-Modified

    • 使用场景
      • ETag 适用于资源版本控制,但在分布式环境下可能导致跨服务器比对失败。
      • Last-Modified 更适合精确控制缓存时间,且与 expires 结合使用效率更高。

    2.4 示例

    location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$ {    expires 30d;}location ~.*\.(js|css)?$ {    expires 12h;}

    2.5 浏览器缓存行为

    • 默认缓存:浏览器默认以 Cache-Control: private 为标准,仅在浏览器中存储缓存。
    • 控制策略
      • Cache-Control: no-cache:强制每次请求重新获取数据。
      • Cache-Control: no-store:禁止临时存储。

    2.6 注意事项

    • 服务器集群:在分布式系统中,Last-ModifiedETag 需要保持一致,否则可能导致 304 错误。
    • 客户端操作:浏览器缓存行为受用户操作影响,如手动刷新或关闭标签页会清空缓存。

    总结

    通过合理配置 HttpHeadersModule 模块的 add_headerexpires 等指令,可以有效控制HTTP缓存行为。理解 Cache-ControlLast-ModifiedETag 等头的作用及其组合使用,是优化网站性能的关键。同时,注意分布式环境下的潜在问题,确保服务器集群下的缓存一致性。

    转载地址:http://kocfk.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0034---Netty架构设计--线程模型
    查看>>
    Netty工作笔记0035---Reactor模式图剖析
    查看>>
    Netty工作笔记0036---单Reactor单线程模式
    查看>>
    Netty工作笔记0037---主从Reactor多线程
    查看>>
    Netty工作笔记0038---Netty模型--通俗版
    查看>>
    Netty工作笔记0039---Netty模型--详细版
    查看>>
    Netty工作笔记0040---Netty入门--服务端1
    查看>>
    Netty工作笔记0041---Netty入门--服务端2
    查看>>
    Netty工作笔记0042---Netty入门--编写客户端
    查看>>
    Netty工作笔记0043---单Reactor多线程模式
    查看>>
    Netty工作笔记0044---Netty案例源码分析
    查看>>
    Netty工作笔记0044---scheduledTaskQueue
    查看>>
    Netty工作笔记0045---Netty模型梳理
    查看>>
    Netty工作笔记0045---异步模型原理剖析
    查看>>
    Netty工作笔记0046---TaskQueue自定义任务
    查看>>
    Netty工作笔记0046---异步模型原理剖析
    查看>>
    Netty工作笔记0047---Http服务程序实例
    查看>>
    Netty工作笔记0048---Http服务过滤资源
    查看>>
    Netty工作笔记0049---阶段内容梳理
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>