<!-- review: finished -->

<a id="http-headers"></a>

# Headers

允许在响应头中添加 `Expires` 和 `Cache-Control` 头字段,以及任意字段。

<a id="configuration-example-22"></a>

## 配置示例

```nginx
expires    24h;
expires    modified +24h;
expires    @24h;
expires    0;
expires    -1;
expires    epoch;
expires    $expires;
add_header Cache-Control private;
```

<a id="directives-23"></a>

## 指令

<a id="index-0"></a>

<a id="add-header"></a>

### add_header

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `add_header` name value [`always`];    |
|--------------------------------------------------------------------------------------|----------------------------------------|
| 默认值                                                                                  | —                                      |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location, if in location |

在响应码为 200、201 (1.3.10)、204、206、301、302、303、304、307 或 308 时,添加指定字段到响应头。参数值可以包含变量。

可以有多个 `add_header` 指令。只有在当前级别未定义任何 `add_header` 指令时,这些指令才会从上一级配置继承。

如果指定了 `always` 参数,则无论响应码如何,都会添加该头字段。

<a id="index-1"></a>

<a id="add-trailer"></a>

### add_trailer

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `add_trailer` name value [`always`];   |
|--------------------------------------------------------------------------------------|----------------------------------------|
| 默认值                                                                                  | —                                      |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location, if in location |

在响应码为 200、201、206、301、302、303、307 或 308 时,添加指定字段至响应的末尾。参数值可以包含变量。

可以有多个 `add_trailer` 指令。只有在当前级别未定义任何 `add_trailer` 指令时,这些指令才会从上一级配置继承。

如果指定了 `always` 参数,则无论响应码如何,都会添加该字段。

<a id="index-2"></a>

<a id="expires"></a>

### expires

| [语法](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)   | `expires` [`modified`] time;<br/><br/>`expires` `epoch` | `max` | `off`;   |
|--------------------------------------------------------------------------------------|----------------------------------------------------------------------------|
| 默认值                                                                                  | `expires off;`                                                             |
| [上下文](https://cn.angie.software//angie/docs/configuration/configfile.md#configfile)  | http, server, location, if in location                                     |

启用或禁用在响应码为 200、201、204、206、301、302、303、304、307 或 308 时添加或修改 `Expires` 和 `Cache-Control` 响应头字段。参数可以是正或负的 [时间](https://cn.angie.software//angie/docs/configuration/configfile.md#syntax)。

`Expires` 字段中的时间是当前时间与指令中指定时间的总和。如果使用了 `modified` 参数,则时间是文件修改时间与指令中指定时间的总和。

此外,可以使用 "@" 前缀指定一天中的某个时间:

```nginx
expires @15h30m;
```

`Cache-Control` 字段的内容取决于指定时间的符号:

* 时间为负 — "Cache-Control: no-cache"。
* 时间为正或零 — "Cache-Control: max-age=\`t\`",其中 t 是指令中指定的时间,以秒为单位。

| `epoch`   | 将 `Expires` 设置为 "Thu, 01 Jan 1970 00:00:01 GMT",:samp:Cache-Control 设置为 "no-cache"。   |
|-----------|---------------------------------------------------------------------------------------|
| `max`     | 将 `Expires` 设置为 "Thu, 31 Dec 2037 23:55:55 GMT",:samp:Cache-Control 设置为 10 年。         |
| `off`     | 禁止添加或修改 `Expires` 和 `Cache-Control` 响应头字段。                                            |

最后的参数值可以包含变量:

```nginx
map $sent_http_content_type $expires {
    default         off;
    application/pdf 42d;
    ~image/         max;
}

expires $expires;
```
