63 static void *ngx_http_headers_create_conf(
ngx_conf_t *cf);
64 static char *ngx_http_headers_merge_conf(
ngx_conf_t *cf,
65 void *parent,
void *child);
75 {
ngx_string(
"Cache-Control"), 0, ngx_http_add_cache_control },
79 ngx_http_set_last_modified },
83 ngx_http_set_response_header },
94 ngx_http_headers_expires,
102 ngx_http_headers_add,
113 ngx_http_headers_filter_init,
121 ngx_http_headers_create_conf,
122 ngx_http_headers_merge_conf
128 &ngx_http_headers_filter_module_ctx,
129 ngx_http_headers_filter_commands,
167 return ngx_http_next_header_filter(r);
171 if (ngx_http_set_expires(r, conf) !=
NGX_OK) {
184 if (h[i].handler(r, &h[i], &value) !=
NGX_OK) {
190 return ngx_http_next_header_filter(r);
198 time_t now, expires_time, max_age;
204 if (expires == NULL) {
207 if (expires == NULL) {
217 len =
sizeof(
"Mon, 28 Sep 1970 06:00:00 GMT");
254 expires->
value.
data = (u_char *)
"Thu, 01 Jan 1970 00:00:01 GMT";
260 expires->
value.
data = (u_char *)
"Thu, 31 Dec 2037 23:55:55 GMT";
282 max_age = expires_time - now;
292 max_age = expires_time - now;
378 if (ngx_http_set_response_header(r, hv, value) !=
NGX_OK) {
397 if (value->
len == 0) {
450 ngx_http_headers_merge_conf(
ngx_conf_t *cf,
void *parent,
void *child)
491 return "is duplicate";
498 if (
ngx_strcmp(value[1].data,
"epoch") == 0) {
519 if (
ngx_strcmp(value[1].data,
"modified") != 0) {
520 return "invalid value";
528 if (value[n].data[0] ==
'@') {
534 return "daily time cannot be used with \"modified\" parameter";
539 }
else if (value[n].data[0] ==
'+') {
544 }
else if (value[n].data[0] ==
'-') {
556 return "invalid value";
562 return "daily time value must be less than 24 hours";
600 hv->
handler = ngx_http_add_header;
603 set = ngx_http_set_headers;
604 for (i = 0;
set[
i].name.len; i++) {
615 if (value[2].len == 0) {
623 ccv.
value = &value[2];