Welcome! Log In Create A New Profile

Advanced

[njs] HTTP: improved setting empty headers.

Dmitry Volyntsev
February 06, 2019 12:22PM
details: https://hg.nginx.org/njs/rev/016d5d9077ef
branches:
changeset: 766:016d5d9077ef
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Wed Feb 06 19:52:54 2019 +0300
description:
HTTP: improved setting empty headers.

Treating empty value as deleting.

diffstat:

nginx/ngx_http_js_module.c | 50 ++++++++++++++++++++++++++++-----------------
1 files changed, 31 insertions(+), 19 deletions(-)

diffs (78 lines):

diff -r 9bd38c6bf046 -r 016d5d9077ef nginx/ngx_http_js_module.c
--- a/nginx/ngx_http_js_module.c Wed Feb 06 19:22:18 2019 +0300
+++ b/nginx/ngx_http_js_module.c Wed Feb 06 19:52:54 2019 +0300
@@ -949,7 +949,12 @@ ngx_http_js_ext_set_header_out(njs_vm_t
h = ngx_http_js_get_header(&r->headers_out.headers.part, v->start,
v->length);

- if (h == NULL || h->hash == 0) {
+ if (h != NULL && value->length == 0) {
+ h->hash = 0;
+ h = NULL;
+ }
+
+ if (h == NULL && value->length != 0) {
h = ngx_list_push(&r->headers_out.headers);
if (h == NULL) {
return NJS_ERROR;
@@ -964,19 +969,21 @@ ngx_http_js_ext_set_header_out(njs_vm_t

h->key.data = p;
h->key.len = v->length;
+ }
+
+ if (h != NULL) {
+ p = ngx_pnalloc(r->pool, value->length);
+ if (p == NULL) {
+ return NJS_ERROR;
+ }
+
+ ngx_memcpy(p, value->start, value->length);
+
+ h->value.data = p;
+ h->value.len = value->length;
h->hash = 1;
}

- p = ngx_pnalloc(r->pool, value->length);
- if (p == NULL) {
- return NJS_ERROR;
- }
-
- ngx_memcpy(p, value->start, value->length);
-
- h->value.data = p;
- h->value.len = value->length;
-
if (v->length == nxt_length("Content-Encoding")
&& ngx_strncasecmp(v->start, (u_char *) "Content-Encoding",
v->length) == 0)
@@ -988,15 +995,20 @@ ngx_http_js_ext_set_header_out(njs_vm_t
&& ngx_strncasecmp(v->start, (u_char *) "Content-Length",
v->length) == 0)
{
- n = ngx_atoi(value->start, value->length);
- if (n == NGX_ERROR) {
- h->hash = 0;
- njs_vm_error(vm, "failed converting argument to integer");
- return NJS_ERROR;
+ if (h != NULL) {
+ n = ngx_atoi(value->start, value->length);
+ if (n == NGX_ERROR) {
+ h->hash = 0;
+ njs_vm_error(vm, "failed converting argument to integer");
+ return NJS_ERROR;
+ }
+
+ r->headers_out.content_length = h;
+ r->headers_out.content_length_n = n;
+
+ } else {
+ ngx_http_clear_content_length(r);
}
-
- r->headers_out.content_length_n = n;
- r->headers_out.content_length = h;
}

return NJS_OK;
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] HTTP: improved setting empty headers.

Dmitry Volyntsev 274 February 06, 2019 12:22PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 248
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready