Mercurial > hg > nginx
diff src/http/modules/ngx_http_headers_filter_module.c @ 7199:6ba68ad8b24c
Basic support of the Link response header.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Thu, 08 Feb 2018 09:54:18 +0300 |
parents | 8666da1ecf33 |
children | ef6a3a99a81a |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_headers_filter_module.c +++ b/src/http/modules/ngx_http_headers_filter_module.c @@ -56,7 +56,7 @@ static ngx_int_t ngx_http_set_expires(ng ngx_http_headers_conf_t *conf); static ngx_int_t ngx_http_parse_expires(ngx_str_t *value, ngx_http_expires_t *expires, time_t *expires_time, char **err); -static ngx_int_t ngx_http_add_cache_control(ngx_http_request_t *r, +static ngx_int_t ngx_http_add_multi_header_lines(ngx_http_request_t *r, ngx_http_header_val_t *hv, ngx_str_t *value); static ngx_int_t ngx_http_add_header(ngx_http_request_t *r, ngx_http_header_val_t *hv, ngx_str_t *value); @@ -77,7 +77,13 @@ static char *ngx_http_headers_add(ngx_co static ngx_http_set_header_t ngx_http_set_headers[] = { - { ngx_string("Cache-Control"), 0, ngx_http_add_cache_control }, + { ngx_string("Cache-Control"), + offsetof(ngx_http_headers_out_t, cache_control), + ngx_http_add_multi_header_lines }, + + { ngx_string("Link"), + offsetof(ngx_http_headers_out_t, link), + ngx_http_add_multi_header_lines }, { ngx_string("Last-Modified"), offsetof(ngx_http_headers_out_t, last_modified), @@ -555,42 +561,40 @@ ngx_http_add_header(ngx_http_request_t * static ngx_int_t -ngx_http_add_cache_control(ngx_http_request_t *r, ngx_http_header_val_t *hv, - ngx_str_t *value) +ngx_http_add_multi_header_lines(ngx_http_request_t *r, + ngx_http_header_val_t *hv, ngx_str_t *value) { - ngx_table_elt_t *cc, **ccp; + ngx_array_t *pa; + ngx_table_elt_t *h, **ph; if (value->len == 0) { return NGX_OK; } - ccp = r->headers_out.cache_control.elts; - - if (ccp == NULL) { + pa = (ngx_array_t *) ((char *) &r->headers_out + hv->offset); - if (ngx_array_init(&r->headers_out.cache_control, r->pool, - 1, sizeof(ngx_table_elt_t *)) - != NGX_OK) + if (pa->elts == NULL) { + if (ngx_array_init(pa, r->pool, 1, sizeof(ngx_table_elt_t *)) != NGX_OK) { return NGX_ERROR; } } - cc = ngx_list_push(&r->headers_out.headers); - if (cc == NULL) { + h = ngx_list_push(&r->headers_out.headers); + if (h == NULL) { return NGX_ERROR; } - cc->hash = 1; - ngx_str_set(&cc->key, "Cache-Control"); - cc->value = *value; + h->hash = 1; + h->key = hv->key; + h->value = *value; - ccp = ngx_array_push(&r->headers_out.cache_control); - if (ccp == NULL) { + ph = ngx_array_push(pa); + if (ph == NULL) { return NGX_ERROR; } - *ccp = cc; + *ph = h; return NGX_OK; }