Skip to content

Commit d71ba25

Browse files
committed
Fetch: added default user agent.
1 parent 8f7ac4c commit d71ba25

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

nginx/ngx_js_http.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ typedef struct {
2424

2525

2626
#define ngx_js_http_version(major, minor) ((major) * 1000 + (minor))
27+
#define NGX_JS_USER_AGENT "nginx-js"
2728

2829

2930
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,
19361937
{
19371938
ngx_str_t method;
19381939
ngx_uint_t i;
1939-
njs_bool_t has_host;
1940+
njs_bool_t has_host, has_user_agent;
19401941
ngx_list_part_t *part;
19411942
ngx_js_tb_elt_t *h;
19421943

@@ -1951,6 +1952,7 @@ ngx_js_fetch_build_request(ngx_js_http_t *http, ngx_js_request_t *request,
19511952
njs_chb_append_literal(&http->chain, " HTTP/1.1" CRLF);
19521953

19531954
has_host = 0;
1955+
has_user_agent = 0;
19541956
part = &request->headers.header_list.part;
19551957
h = part->elts;
19561958

@@ -1977,7 +1979,17 @@ ngx_js_fetch_build_request(ngx_js_http_t *http, ngx_js_request_t *request,
19771979
njs_chb_append_literal(&http->chain, "Host: ");
19781980
njs_chb_append(&http->chain, h[i].value.data, h[i].value.len);
19791981
njs_chb_append_literal(&http->chain, CRLF);
1980-
break;
1982+
continue;
1983+
}
1984+
1985+
if (h[i].key.len == 10
1986+
&& ngx_strncasecmp(h[i].key.data, (u_char *) "User-Agent", 10) == 0)
1987+
{
1988+
has_user_agent = 1;
1989+
njs_chb_append_literal(&http->chain, "User-Agent: ");
1990+
njs_chb_append(&http->chain, h[i].value.data, h[i].value.len);
1991+
njs_chb_append_literal(&http->chain, CRLF);
1992+
continue;
19811993
}
19821994
}
19831995

@@ -1992,6 +2004,13 @@ ngx_js_fetch_build_request(ngx_js_http_t *http, ngx_js_request_t *request,
19922004
njs_chb_append_literal(&http->chain, CRLF);
19932005
}
19942006

2007+
if (!has_user_agent) {
2008+
njs_chb_append_literal(&http->chain, "User-Agent: ");
2009+
njs_chb_append(&http->chain, (u_char *) NGX_JS_USER_AGENT,
2010+
sizeof(NGX_JS_USER_AGENT) - 1);
2011+
njs_chb_append_literal(&http->chain, CRLF);
2012+
}
2013+
19952014
ngx_js_fetch_append_request_headers(&http->chain, request);
19962015

19972016
if (!http->keepalive) {

nginx/t/js_fetch.t

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ http {
9292
js_content test.host_header;
9393
}
9494
95+
location /user_agent_header {
96+
js_content test.user_agent_header;
97+
}
98+
9599
location /header_iter {
96100
js_content test.header_iter;
97101
}
@@ -122,6 +126,10 @@ http {
122126
location /host {
123127
return 200 $http_host;
124128
}
129+
130+
location /user_agent {
131+
return 200 $http_user_agent;
132+
}
125133
}
126134
}
127135
@@ -318,6 +326,17 @@ $t->write_file('test.js', <<EOF);
318326
r.return(200, body);
319327
}
320328
329+
async function user_agent_header(r) {
330+
let opts = {};
331+
if (r.args.ua) {
332+
opts.headers = { 'User-Agent': r.args.ua };
333+
}
334+
335+
const reply = await ngx.fetch(`http://127.0.0.1:$p1/user_agent`, opts);
336+
const body = await reply.text();
337+
r.return(200, body);
338+
}
339+
321340
async function body_special(r) {
322341
let opts = {};
323342
@@ -411,12 +430,13 @@ $t->write_file('test.js', <<EOF);
411430
412431
export default {njs: test_njs, body, broken, broken_response, body_special,
413432
chain, chunked_ok, chunked_fail, header, header_iter,
414-
host_header, multi, loc, property, body_content_length };
433+
host_header, multi, loc, property, body_content_length,
434+
user_agent_header };
415435
EOF
416436

417437
$t->try_run('no njs.fetch');
418438

419-
$t->plan(38);
439+
$t->plan(40);
420440

421441
$t->run_daemon(\&http_daemon, port(8082));
422442
$t->waitforsocket('127.0.0.1:' . port(8082));
@@ -527,6 +547,12 @@ like(http_get('/body_content_length'), qr/200 OK/s,
527547

528548
}
529549

550+
like(http_get('/user_agent_header'),
551+
qr/200 OK.*nginx-js\/1.0$/s,
552+
'fetch default user-agent header');
553+
like(http_get('/user_agent_header?ua=My-User-Agent'),
554+
qr/200 OK.*My-User-Agent$/s, 'fetch user-agent header');
555+
530556
###############################################################################
531557

532558
sub has_version {

0 commit comments

Comments
 (0)