本文共 1933 字,大约阅读时间需要 6 分钟。
通过 HttpHeadersModule 模块,可以对HTTP响应头进行设置。这种设置主要用于控制缓存行为,但需要注意以下几点:
Last-Modified),只能添加新的头。Cache-Control 相比,expires 的优先级较低,且两者可以共存,但 Cache-Control 的效果优先。add_header name valuehttp、server、locationexpires [modified] time | epoch | max | off;expires offhttp、server、location、if in locationoff:阻止修改 Expires 和 Cache-Control 头。max:设置 Expires 为2037年,并将 Cache-Control 的 max-age 设为10年。若设置为时间值或非负数,max-age 会转换为秒数。expires 优先级低于 Cache-Control。no-cache:数据不可缓存,每次请求重新获取。no-store:不允许缓存,包括临时存储。private:仅在浏览器缓存,第一次请求后不重新获取(若有 max-age)。public:可在所有缓存区存储。max-age:缓存时间(秒)。Last-Modified 头。2.客户端在下一次请求时,发送 If-Modified-Since 头,询问是否有修改。3.服务器判断是否有修改,如果无修改返回 304 Not Modified。If-None-Match 头。2.服务器检查 ETag 是否匹配,如果不匹配返回 304。ETag 不建议使用,因其可能导致比对失败。Cache-Control 高于 expires。Cache-Control 的 max-age 优先生效。Last-Modified 主要用于减少数据传输量,而 expires 控制缓存期限。HTTP 请求。ETag 适用于资源版本控制,但在分布式环境下可能导致跨服务器比对失败。Last-Modified 更适合精确控制缓存时间,且与 expires 结合使用效率更高。location ~.*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d;}location ~.*\.(js|css)?$ { expires 12h;} Cache-Control: private 为标准,仅在浏览器中存储缓存。Cache-Control: no-cache:强制每次请求重新获取数据。Cache-Control: no-store:禁止临时存储。Last-Modified 和 ETag 需要保持一致,否则可能导致 304 错误。通过合理配置 HttpHeadersModule 模块的 add_header、expires 等指令,可以有效控制HTTP缓存行为。理解 Cache-Control、Last-Modified、ETag 等头的作用及其组合使用,是优化网站性能的关键。同时,注意分布式环境下的潜在问题,确保服务器集群下的缓存一致性。
转载地址:http://kocfk.baihongyu.com/