Welcome! Log In Create A New Profile

Advanced

[njs] HTTP: allowing to set Server header.

Dmitry Volyntsev
March 05, 2024 12:26PM
details: https://hg.nginx.org/njs/rev/eb01434865d7
branches:
changeset: 2295:eb01434865d7
user: Dmitry Volyntsev <xeioex@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
Subject Author Views Posted

[njs] HTTP: allowing to set Server header.

Dmitry Volyntsev 165 March 05, 2024 12:26PM



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

Online Users

Guests: 160
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