[OPTIM] http: don't send each chunk in a separate packet
When forwarding chunk-encoded data, each chunk gets a TCP PUSH flag when
going onto the wire simply because the send() function does not know that
some data remain after it (next chunk). Now we set the BF_EXPECT_MORE flag
on the buffer if the chunk size is not null. That way we can reduce the
number of packets sent, which is particularly noticeable when forwarding
compressed data, especially as it requires less ACKs from the client.
diff --git a/src/proto_http.c b/src/proto_http.c
index aa3ed53..4dcefca 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -4364,6 +4364,9 @@
goto return_bad_req;
}
/* otherwise we're in HTTP_MSG_DATA or HTTP_MSG_TRAILERS state */
+ /* Don't set a PUSH at the end of that chunk if it's not the last one */
+ if (msg->msg_state == HTTP_MSG_DATA)
+ req->flags |= BF_EXPECT_MORE;
}
else if (msg->msg_state == HTTP_MSG_DATA_CRLF) {
/* we want the CRLF after the data */
@@ -5342,6 +5345,9 @@
else if (ret < 0)
goto return_bad_res;
/* otherwise we're in HTTP_MSG_DATA or HTTP_MSG_TRAILERS state */
+ /* Don't set a PUSH at the end of that chunk if it's not the last one */
+ if (msg->msg_state == HTTP_MSG_DATA)
+ res->flags |= BF_EXPECT_MORE;
}
else if (msg->msg_state == HTTP_MSG_DATA_CRLF) {
/* we want the CRLF after the data */