details: https://hg.nginx.org/njs/rev/eb01434865d7 branches: changeset: 2295:eb01434865d7 user: Dmitry Volyntsev <xei...@nginx.com> date: Thu Feb 29 20:56:56 2024 -0800 description: HTTP: allowing to set Server header.
diffstat: nginx/ngx_http_js_module.c | 38 ++++++++++++++++++++++++++++++++++++++ nginx/t/js_headers.t | 22 ++++++++++++++++++++-- 2 files changed, 58 insertions(+), 2 deletions(-) diffs (140 lines): diff -r d7a0bbcba46e -r eb01434865d7 nginx/ngx_http_js_module.c --- a/nginx/ngx_http_js_module.c Thu Feb 29 18:56:13 2024 -0800 +++ b/nginx/ngx_http_js_module.c Thu Feb 29 20:56:56 2024 -0800 @@ -149,6 +149,9 @@ static njs_int_t ngx_http_js_last_modifi static njs_int_t ngx_http_js_location122(njs_vm_t *vm, ngx_http_request_t *r, ngx_list_t *headers, njs_str_t *name, njs_value_t *setval, njs_value_t *retval); +static njs_int_t ngx_http_js_server122(njs_vm_t *vm, ngx_http_request_t *r, + ngx_list_t *headers, njs_str_t *name, njs_value_t *setval, + njs_value_t *retval); #endif static njs_int_t ngx_http_js_ext_keys_header_out(njs_vm_t *vm, njs_value_t *value, njs_value_t *keys); @@ -255,6 +258,9 @@ static njs_int_t ngx_http_js_last_modifi static njs_int_t ngx_http_js_location(njs_vm_t *vm, ngx_http_request_t *r, unsigned flags, njs_str_t *name, njs_value_t *setval, njs_value_t *retval); +static njs_int_t ngx_http_js_server(njs_vm_t *vm, ngx_http_request_t *r, + unsigned flags, njs_str_t *name, njs_value_t *setval, + njs_value_t *retval); static ngx_pool_t *ngx_http_js_pool(njs_vm_t *vm, ngx_http_request_t *r); static ngx_resolver_t *ngx_http_js_resolver(njs_vm_t *vm, @@ -1617,6 +1623,7 @@ ngx_http_js_ext_header_out(njs_vm_t *vm, { njs_str("Expires"), ngx_http_js_header_single }, { njs_str("Last-Modified"), ngx_http_js_last_modified122 }, { njs_str("Location"), ngx_http_js_location122 }, + { njs_str("Server"), ngx_http_js_server122 }, { njs_str("Set-Cookie"), ngx_http_js_header_array }, { njs_str("Retry-After"), ngx_http_js_header_single }, { njs_str(""), ngx_http_js_header_generic }, @@ -1630,6 +1637,7 @@ ngx_http_js_ext_header_out(njs_vm_t *vm, { njs_str("Expires"), NJS_HEADER_SINGLE, ngx_http_js_header_out }, { njs_str("Last-Modified"), 0, ngx_http_js_last_modified }, { njs_str("Location"), 0, ngx_http_js_location }, + { njs_str("Server"), 0, ngx_http_js_server }, { njs_str("Set-Cookie"), NJS_HEADER_ARRAY, ngx_http_js_header_out }, { njs_str("Retry-After"), NJS_HEADER_SINGLE, ngx_http_js_header_out }, { njs_str(""), 0, ngx_http_js_header_out }, @@ -2065,6 +2073,14 @@ ngx_http_js_location122(njs_vm_t *vm, ng { return ngx_http_js_location(vm, r, 0, v, setval, retval); } + + +static njs_int_t +ngx_http_js_server122(njs_vm_t *vm, ngx_http_request_t *r, + ngx_list_t *headers, njs_str_t *v, njs_value_t *setval, njs_value_t *retval) +{ + return ngx_http_js_server(vm, r, 0, v, setval, retval); +} #endif @@ -4160,6 +4176,28 @@ ngx_http_js_location(njs_vm_t *vm, ngx_h } +static njs_int_t +ngx_http_js_server(njs_vm_t *vm, ngx_http_request_t *r, unsigned flags, + njs_str_t *v, njs_value_t *setval, njs_value_t *retval) +{ + njs_int_t rc; + ngx_table_elt_t *h; + + rc = ngx_http_js_header_out_special(vm, r, v, setval, retval, &h); + if (rc == NJS_ERROR) { + return NJS_ERROR; + } + + if (setval != NULL || retval == NULL) { + r->headers_out.server = h; + } + + return NJS_OK; + + return NJS_OK; +} + + static void ngx_http_js_periodic_handler(ngx_event_t *ev) { diff -r d7a0bbcba46e -r eb01434865d7 nginx/t/js_headers.t --- a/nginx/t/js_headers.t Thu Feb 29 18:56:13 2024 -0800 +++ b/nginx/t/js_headers.t Thu Feb 29 20:56:56 2024 -0800 @@ -160,6 +160,10 @@ http { js_content test.copy_subrequest_hdrs; } + location /server { + js_content test.server; + } + location = /subrequest { internal; @@ -435,6 +439,11 @@ EOF r.return(200, resp.responseText); } + function server(r) { + r.headersOut['Server'] = 'Foo'; + r.return(200); + } + function subrequest(r) { r.headersOut['A'] = 'a'; r.headersOut['Content-Encoding'] = 'ce'; @@ -456,12 +465,12 @@ EOF hdr_out, raw_hdr_out, hdr_out_array, hdr_out_single, hdr_out_set_cookie, ihdr_out, hdr_out_special_set, copy_subrequest_hdrs, subrequest, date, last_modified, - location, location_sr}; + location, location_sr, server}; EOF -$t->try_run('no njs')->plan(46); +$t->try_run('no njs')->plan(49); ############################################################################### @@ -620,6 +629,15 @@ like(http_get('/last_modified'), } +TODO: { +local $TODO = 'not yet' unless has_version('0.8.4'); + +like(http_get('/date'), qr/Server: nginx/, 'normal server'); +like(http_get('/server'), qr/Server: Foo/, 'set server'); +unlike(http_get('/server'), qr/Server: nginx/, 'set server 2'); + +} + ############################################################################### sub has_version { _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel