diff --git a/src/shrpx.cc b/src/shrpx.cc index a83062f3..16daa620 100644 --- a/src/shrpx.cc +++ b/src/shrpx.cc @@ -1610,14 +1610,15 @@ HTTP: used several times to specify multiple header fields. Example: --add-response-header="foo: bar" --header-field-buffer= - Set maximum buffer size for incoming HTTP header field - list. This is the sum of header name and value in + Set maximum buffer size for incoming HTTP request header + field list. This is the sum of header name and value in bytes. Default: )" << util::utos_with_unit(get_config()->header_field_buffer) << R"( --max-header-fields= - Set maximum number of incoming HTTP header fields, which - appear in one request or response header field list. + Set maximum number of incoming HTTP request header + fields, which appear in one request or response header + field list. Default: )" << get_config()->max_header_fields << R"( Debug: diff --git a/src/shrpx_http2_session.cc b/src/shrpx_http2_session.cc index dd6ed02d..7ab65ed8 100644 --- a/src/shrpx_http2_session.cc +++ b/src/shrpx_http2_session.cc @@ -757,26 +757,6 @@ int on_header_callback(nghttp2_session *session, const nghttp2_frame *frame, auto trailer = frame->headers.cat == NGHTTP2_HCAT_HEADERS && !downstream->get_expect_final_response(); - if (downstream->get_response_headers_sum() + namelen + valuelen > - get_config()->header_field_buffer || - downstream->get_response_headers().size() >= - get_config()->max_header_fields) { - if (LOG_ENABLED(INFO)) { - DLOG(INFO, downstream) - << "Too large or many header field size=" - << downstream->get_response_headers_sum() + namelen + valuelen - << ", num=" << downstream->get_response_headers().size() + 1; - } - - if (trailer) { - // we don't care trailer part exceeds header size limit; just - // discard it. - return 0; - } - - return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; - } - if (trailer) { // just store header fields for trailer part downstream->add_response_trailer(name, namelen, value, valuelen, @@ -803,21 +783,6 @@ int on_header_callback(nghttp2_session *session, const nghttp2_frame *frame, assert(promised_downstream); - if (promised_downstream->get_request_headers_sum() + namelen + valuelen > - get_config()->header_field_buffer || - promised_downstream->get_request_headers().size() >= - get_config()->max_header_fields) { - if (LOG_ENABLED(INFO)) { - DLOG(INFO, promised_downstream) - << "Too large or many header field size=" - << promised_downstream->get_request_headers_sum() + namelen + - valuelen << ", num=" - << promised_downstream->get_request_headers().size() + 1; - } - - return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE; - } - auto token = http2::lookup_token(name, namelen); promised_downstream->add_request_header(name, namelen, value, valuelen, flags & NGHTTP2_NV_FLAG_NO_INDEX, diff --git a/src/shrpx_http_downstream_connection.cc b/src/shrpx_http_downstream_connection.cc index 720f5a34..bab1c902 100644 --- a/src/shrpx_http_downstream_connection.cc +++ b/src/shrpx_http_downstream_connection.cc @@ -562,29 +562,10 @@ int htp_hdrs_completecb(http_parser *htp) { namespace { int htp_hdr_keycb(http_parser *htp, const char *data, size_t len) { auto downstream = static_cast(htp->data); - - if (downstream->get_response_headers_sum() + len > - get_config()->header_field_buffer) { - if (LOG_ENABLED(INFO)) { - DLOG(INFO, downstream) << "Too large header block size=" - << downstream->get_response_headers_sum() + len; - } - return -1; - } - if (downstream->get_response_state() == Downstream::INITIAL) { if (downstream->get_response_header_key_prev()) { downstream->append_last_response_header_key(data, len); } else { - if (downstream->get_response_headers().size() >= - get_config()->max_header_fields) { - if (LOG_ENABLED(INFO)) { - DLOG(INFO, downstream) - << "Too many header field num=" - << downstream->get_response_headers().size() + 1; - } - return -1; - } downstream->add_response_header(std::string(data, len), ""); } } else { @@ -592,15 +573,6 @@ int htp_hdr_keycb(http_parser *htp, const char *data, size_t len) { if (downstream->get_response_trailer_key_prev()) { downstream->append_last_response_trailer_key(data, len); } else { - if (downstream->get_response_headers().size() >= - get_config()->max_header_fields) { - if (LOG_ENABLED(INFO)) { - DLOG(INFO, downstream) - << "Too many header field num=" - << downstream->get_response_headers().size() + 1; - } - return -1; - } downstream->add_response_trailer(std::string(data, len), ""); } } @@ -611,14 +583,6 @@ int htp_hdr_keycb(http_parser *htp, const char *data, size_t len) { namespace { int htp_hdr_valcb(http_parser *htp, const char *data, size_t len) { auto downstream = static_cast(htp->data); - if (downstream->get_response_headers_sum() + len > - get_config()->header_field_buffer) { - if (LOG_ENABLED(INFO)) { - DLOG(INFO, downstream) << "Too large header block size=" - << downstream->get_response_headers_sum() + len; - } - return -1; - } if (downstream->get_response_state() == Downstream::INITIAL) { if (downstream->get_response_header_key_prev()) { downstream->set_last_response_header_value(data, len);