From: Dmitry Volyntsev Date: Thu, 16 Oct 2025 01:56:48 +0000 (-0700) Subject: Fetch: added default user agent. X-Git-Tag: 0.9.4~2 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=4d54ee505ab27845255b7ddc7983f02ad5056085;p=njs.git Fetch: added default user agent. --- diff --git a/nginx/ngx_js_http.c b/nginx/ngx_js_http.c index 400d42d2..9f150f0c 100644 --- a/nginx/ngx_js_http.c +++ b/nginx/ngx_js_http.c @@ -24,6 +24,7 @@ typedef struct { #define ngx_js_http_version(major, minor) ((major) * 1000 + (minor)) +#define NGX_JS_USER_AGENT "nginx-js" static void ngx_js_http_resolve_handler(ngx_resolver_ctx_t *ctx); @@ -1936,7 +1937,7 @@ ngx_js_fetch_build_request(ngx_js_http_t *http, ngx_js_request_t *request, { ngx_str_t method; ngx_uint_t i; - njs_bool_t has_host; + njs_bool_t has_host, has_user_agent; ngx_list_part_t *part; ngx_js_tb_elt_t *h; @@ -1951,6 +1952,7 @@ ngx_js_fetch_build_request(ngx_js_http_t *http, ngx_js_request_t *request, njs_chb_append_literal(&http->chain, " HTTP/1.1" CRLF); has_host = 0; + has_user_agent = 0; part = &request->headers.header_list.part; h = part->elts; @@ -1977,7 +1979,17 @@ ngx_js_fetch_build_request(ngx_js_http_t *http, ngx_js_request_t *request, njs_chb_append_literal(&http->chain, "Host: "); njs_chb_append(&http->chain, h[i].value.data, h[i].value.len); njs_chb_append_literal(&http->chain, CRLF); - break; + continue; + } + + if (h[i].key.len == 10 + && ngx_strncasecmp(h[i].key.data, (u_char *) "User-Agent", 10) == 0) + { + has_user_agent = 1; + njs_chb_append_literal(&http->chain, "User-Agent: "); + njs_chb_append(&http->chain, h[i].value.data, h[i].value.len); + njs_chb_append_literal(&http->chain, CRLF); + continue; } } @@ -1992,6 +2004,13 @@ ngx_js_fetch_build_request(ngx_js_http_t *http, ngx_js_request_t *request, njs_chb_append_literal(&http->chain, CRLF); } + if (!has_user_agent) { + njs_chb_append_literal(&http->chain, "User-Agent: "); + njs_chb_append(&http->chain, (u_char *) NGX_JS_USER_AGENT, + sizeof(NGX_JS_USER_AGENT) - 1); + njs_chb_append_literal(&http->chain, CRLF); + } + ngx_js_fetch_append_request_headers(&http->chain, request); if (!http->keepalive) { diff --git a/nginx/t/js_fetch.t b/nginx/t/js_fetch.t index 76d9238d..d26e664a 100644 --- a/nginx/t/js_fetch.t +++ b/nginx/t/js_fetch.t @@ -92,6 +92,10 @@ http { js_content test.host_header; } + location /user_agent_header { + js_content test.user_agent_header; + } + location /header_iter { js_content test.header_iter; } @@ -122,6 +126,10 @@ http { location /host { return 200 $http_host; } + + location /user_agent { + return 200 $http_user_agent; + } } } @@ -318,6 +326,17 @@ $t->write_file('test.js', <write_file('test.js', <try_run('no njs.fetch'); -$t->plan(38); +$t->plan(40); $t->run_daemon(\&http_daemon, port(8082)); $t->waitforsocket('127.0.0.1:' . port(8082)); @@ -527,6 +547,12 @@ like(http_get('/body_content_length'), qr/200 OK/s, } +like(http_get('/user_agent_header'), + qr/200 OK.*nginx-js\/1.0$/s, + 'fetch default user-agent header'); +like(http_get('/user_agent_header?ua=My-User-Agent'), + qr/200 OK.*My-User-Agent$/s, 'fetch user-agent header'); + ############################################################################### sub has_version {