问题描述:
nginx 的 add_header
配置在很多文档中都标注为:“可以覆盖响应头”,然而并没有说出使用场景,导致不少开发人员在使用 add_header 时都出现了错误:add_header 根本没有重写响应头!
add_header 的正确使用场景:
add_header 配置可以重写响应头,但是必须满足以下条件:
-
重写的响应头不能是诸如
Content-Length
、Content-Type
、Date
、Server
等具有特殊含义的头部。根据 HTTP 规范,Nginx 会默认忽略对这些响应头的重写。 -
重写的响应头必须是父结构中已定义的响应头。如:下面配置中,首先在父结构体中定义了响应头
X-Cache = $upstream_cache_status
,然后在子结构体中又定义了响应头X-Cache = "123"
,如此一来子结构体的 X-Cache 响应头就会覆盖父结构体的响应头,结果见下图:add_header X-Cache $upstream_cache_status; location /test{ default_type text/html; add_header X-Cache "123"; return 200 "测试"; }