nghttpx: Fix the issue that forwarded h3 GET request always has chunked TE
This commit is contained in:
parent
02a5649343
commit
2275327794
|
@ -114,8 +114,9 @@ jobs:
|
||||||
- name: Build nghttp3
|
- name: Build nghttp3
|
||||||
if: matrix.http3 == 'http3'
|
if: matrix.http3 == 'http3'
|
||||||
run: |
|
run: |
|
||||||
git clone --depth 1 -b v0.1.1 https://github.com/ngtcp2/nghttp3
|
git clone https://github.com/ngtcp2/nghttp3
|
||||||
cd nghttp3
|
cd nghttp3
|
||||||
|
git checkout 207318c92e0578ac393c31dcd797e4a4dca3e31a
|
||||||
autoreconf -i
|
autoreconf -i
|
||||||
./configure --prefix=$PWD/build --enable-lib-only
|
./configure --prefix=$PWD/build --enable-lib-only
|
||||||
make -j$(nproc) check
|
make -j$(nproc) check
|
||||||
|
|
|
@ -366,8 +366,9 @@ Build nghttp3:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b v0.1.1 https://github.com/ngtcp2/nghttp3
|
$ git clone https://github.com/ngtcp2/nghttp3
|
||||||
$ cd nghttp3
|
$ cd nghttp3
|
||||||
|
$ git checkout 207318c92e0578ac393c31dcd797e4a4dca3e31a
|
||||||
$ autoreconf -i
|
$ autoreconf -i
|
||||||
$ ./configure --prefix=$PWD/build --enable-lib-only
|
$ ./configure --prefix=$PWD/build --enable-lib-only
|
||||||
$ make -j$(nproc)
|
$ make -j$(nproc)
|
||||||
|
|
|
@ -1998,7 +1998,7 @@ int Http3Upstream::http_recv_request_header(Downstream *downstream,
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
int http_end_request_headers(nghttp3_conn *conn, int64_t stream_id,
|
int http_end_request_headers(nghttp3_conn *conn, int64_t stream_id, int fin,
|
||||||
void *user_data, void *stream_user_data) {
|
void *user_data, void *stream_user_data) {
|
||||||
auto upstream = static_cast<Http3Upstream *>(user_data);
|
auto upstream = static_cast<Http3Upstream *>(user_data);
|
||||||
auto handler = upstream->get_client_handler();
|
auto handler = upstream->get_client_handler();
|
||||||
|
@ -2008,7 +2008,7 @@ int http_end_request_headers(nghttp3_conn *conn, int64_t stream_id,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (upstream->http_end_request_headers(downstream) != 0) {
|
if (upstream->http_end_request_headers(downstream, fin) != 0) {
|
||||||
return NGHTTP3_ERR_CALLBACK_FAILURE;
|
return NGHTTP3_ERR_CALLBACK_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2019,7 +2019,7 @@ int http_end_request_headers(nghttp3_conn *conn, int64_t stream_id,
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
int Http3Upstream::http_end_request_headers(Downstream *downstream) {
|
int Http3Upstream::http_end_request_headers(Downstream *downstream, int fin) {
|
||||||
auto lgconf = log_config();
|
auto lgconf = log_config();
|
||||||
lgconf->update_tstamp(std::chrono::system_clock::now());
|
lgconf->update_tstamp(std::chrono::system_clock::now());
|
||||||
auto &req = downstream->request();
|
auto &req = downstream->request();
|
||||||
|
@ -2115,8 +2115,11 @@ int Http3Upstream::http_end_request_headers(Downstream *downstream) {
|
||||||
req.connect_proto = ConnectProto::WEBSOCKET;
|
req.connect_proto = ConnectProto::WEBSOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We are not sure that request has body or not at the moment.
|
if (!fin) {
|
||||||
req.http2_expect_body = true;
|
req.http2_expect_body = true;
|
||||||
|
} else if (req.fs.content_length == -1) {
|
||||||
|
req.fs.content_length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
downstream->inspect_http2_request();
|
downstream->inspect_http2_request();
|
||||||
|
|
||||||
|
|
|
@ -125,7 +125,7 @@ public:
|
||||||
int http_recv_request_header(Downstream *downstream, int32_t token,
|
int http_recv_request_header(Downstream *downstream, int32_t token,
|
||||||
nghttp3_rcbuf *name, nghttp3_rcbuf *value,
|
nghttp3_rcbuf *name, nghttp3_rcbuf *value,
|
||||||
uint8_t flags);
|
uint8_t flags);
|
||||||
int http_end_request_headers(Downstream *downstream);
|
int http_end_request_headers(Downstream *downstream, int fin);
|
||||||
int http_end_stream(Downstream *downstream);
|
int http_end_stream(Downstream *downstream);
|
||||||
void start_downstream(Downstream *downstream);
|
void start_downstream(Downstream *downstream);
|
||||||
void initiate_downstream(Downstream *downstream);
|
void initiate_downstream(Downstream *downstream);
|
||||||
|
|
Loading…
Reference in New Issue