How to unset header in nginx module
Maxim Dounin
mdounin at mdounin.ru
Fri Mar 16 17:32:23 UTC 2012
Hello!
On Sat, Mar 17, 2012 at 01:58:14AM +0900, Tsukasa Hamano wrote:
> Hi,
>
> I'd like to delete particular headers_in like a apr_table_unset() in
> request handler of my module.
>
> I wrote examples from the article:
> http://wiki.nginx.org/HeadersManagement
>
> static void unset_header(ngx_http_request_t *r, u_char *key){
> ngx_list_part_t *part;
> ngx_table_elt_t *h;
> ngx_uint_t i;
> size_t len = strlen((char *)key);
>
> part = &r->headers_in.headers.part;
> h = part->elts;
> for (i = 0; ; i++) {
> if (i >= part->nelts) {
> if (part->next == NULL) {
> break;
> }
> part = part->next;
> h = part->elts;
> i = 0;
> }
> if (len != h[i].key.len || ngx_strcasecmp(key, h[i].key.data) != 0) {
> h[i].hash = 0;
> h[i].key.len = 0;
> h[i].key.data = NULL;
> h[i].value.len = 0;
> h[i].value.data = NULL;
> h[i].lowcase_key = NULL;
> }
> }
> }
>
> But this code send empty header(only colon) line to backend.
> like this:
>
> :
>
> Should I reconstruct list of headers_in.headers?
> Or, should I modify http main module that to avoid sending null header?
> Or, Is there any better(faster) way?
You shouldn't touch r->headers_in at all. It represents headers
got from client, and it's incorrect to change them.
Instead, to restrict headers passed to backends you should use
functionality provided by relevant backend modules, e.g. with
proxy_pass use
proxy_set_header X-Some-Header "";
Maxim Dounin
More information about the nginx
mailing list