Skip to content

Commit 82c3449

Browse files
committed
optimize parse request header key
1 parent d3c9dfe commit 82c3449

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

ext-src/swoole_http_request.cc

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -342,16 +342,15 @@ bool swoole_http_token_list_contains_value(const char *at, size_t length, const
342342
static int http_request_on_header_value(swoole_http_parser *parser, const char *at, size_t length) {
343343
HttpContext *ctx = (HttpContext *) parser->data;
344344
zval *zheader = ctx->request.zheader;
345+
char *header_name = ctx->current_header_name;
345346
size_t header_len = ctx->current_header_name_len;
346-
char header_name[header_len];
347-
zend_str_tolower_copy(header_name, ctx->current_header_name, header_len);
348347

349-
if (ctx->parse_cookie && SW_STREQ(header_name, header_len, "cookie")) {
348+
if (ctx->parse_cookie && SW_STRCASEEQ(header_name, header_len, "cookie")) {
350349
zval *zcookie = swoole_http_init_and_read_property(
351350
swoole_http_request_ce, ctx->request.zobject, &ctx->request.zcookie, SW_ZSTR_KNOWN(SW_ZEND_STR_COOKIE));
352351
swoole_http_parse_cookie(zcookie, at, length);
353352
return 0;
354-
} else if (SW_STREQ(header_name, header_len, "upgrade") &&
353+
} else if (SW_STRCASEEQ(header_name, header_len, "upgrade") &&
355354
swoole_http_token_list_contains_value(at, length, "websocket")) {
356355
ctx->websocket = 1;
357356
if (ctx->co_socket) {
@@ -372,7 +371,7 @@ static int http_request_on_header_value(swoole_http_parser *parser, const char *
372371
}
373372
} else if ((parser->method == PHP_HTTP_POST || parser->method == PHP_HTTP_PUT ||
374373
parser->method == PHP_HTTP_DELETE || parser->method == PHP_HTTP_PATCH) &&
375-
SW_STREQ(header_name, header_len, "content-type")) {
374+
SW_STRCASEEQ(header_name, header_len, "content-type")) {
376375
if (SW_STR_ISTARTS_WITH(at, length, "application/x-www-form-urlencoded")) {
377376
ctx->request.post_form_urlencoded = 1;
378377
} else if (SW_STR_ISTARTS_WITH(at, length, "multipart/form-data")) {
@@ -387,11 +386,11 @@ static int http_request_on_header_value(swoole_http_parser *parser, const char *
387386
}
388387
}
389388
#ifdef SW_HAVE_COMPRESSION
390-
else if (ctx->enable_compression && SW_STREQ(header_name, header_len, "accept-encoding")) {
389+
else if (ctx->enable_compression && SW_STRCASEEQ(header_name, header_len, "accept-encoding")) {
391390
ctx->set_compression_method(at, length);
392391
}
393392
#endif
394-
else if (SW_STREQ(header_name, header_len, "transfer-encoding") && SW_STR_ISTARTS_WITH(at, length, "chunked")) {
393+
else if (SW_STRCASEEQ(header_name, header_len, "transfer-encoding") && SW_STR_ISTARTS_WITH(at, length, "chunked")) {
395394
ctx->recv_chunked = 1;
396395
}
397396

@@ -402,24 +401,27 @@ static int http_request_on_header_value(swoole_http_parser *parser, const char *
402401
/**
403402
* some common request header key
404403
*/
405-
if (SW_STREQ(header_name, header_len, "host")) {
404+
if (SW_STRCASEEQ(header_name, header_len, "host")) {
406405
zend_hash_update(Z_ARR_P(zheader), SW_ZSTR_KNOWN(SW_ZEND_STR_HOST), &tmp);
407-
} else if (SW_STREQ(header_name, header_len, "user-agent")) {
406+
} else if (SW_STRCASEEQ(header_name, header_len, "user-agent")) {
408407
zend_hash_update(Z_ARR_P(zheader), SW_ZSTR_KNOWN(SW_ZEND_STR_USER_AGENT), &tmp);
409-
} else if (SW_STREQ(header_name, header_len, "accept")) {
408+
} else if (SW_STRCASEEQ(header_name, header_len, "accept")) {
410409
zend_hash_update(Z_ARR_P(zheader), SW_ZSTR_KNOWN(SW_ZEND_STR_ACCEPT), &tmp);
411-
} else if (SW_STREQ(header_name, header_len, "content-type")) {
410+
} else if (SW_STRCASEEQ(header_name, header_len, "content-type")) {
412411
zend_hash_update(Z_ARR_P(zheader), SW_ZSTR_KNOWN(SW_ZEND_STR_CONTENT_TYPE), &tmp);
413-
} else if (SW_STREQ(header_name, header_len, "content-length")) {
412+
} else if (SW_STRCASEEQ(header_name, header_len, "content-length")) {
414413
zend_hash_update(Z_ARR_P(zheader), SW_ZSTR_KNOWN(SW_ZEND_STR_CONTENT_LENGTH), &tmp);
415-
} else if (SW_STREQ(header_name, header_len, "authorization")) {
414+
} else if (SW_STRCASEEQ(header_name, header_len, "authorization")) {
416415
zend_hash_update(Z_ARR_P(zheader), SW_ZSTR_KNOWN(SW_ZEND_STR_AUTHORIZATION), &tmp);
417-
} else if (SW_STREQ(header_name, header_len, "connection")) {
416+
} else if (SW_STRCASEEQ(header_name, header_len, "connection")) {
418417
zend_hash_update(Z_ARR_P(zheader), SW_ZSTR_KNOWN(SW_ZEND_STR_CONNECTION), &tmp);
419-
} else if (SW_STREQ(header_name, header_len, "accept-encoding")) {
418+
} else if (SW_STRCASEEQ(header_name, header_len, "accept-encoding")) {
420419
zend_hash_update(Z_ARR_P(zheader), SW_ZSTR_KNOWN(SW_ZEND_STR_ACCEPT_ENCODING), &tmp);
421420
} else {
422-
zend_hash_str_update(Z_ARR_P(zheader), header_name, header_len, &tmp);
421+
char *new_header_name = estrndup(header_name, header_len);
422+
zend_str_tolower_copy(new_header_name, header_name, header_len);
423+
zend_hash_str_update(Z_ARR_P(zheader), new_header_name, header_len, &tmp);
424+
efree(new_header_name);
423425
}
424426

425427
return 0;

0 commit comments

Comments
 (0)