According to RFC 9110, The HEAD method is identical to GET except
that the server MUST NOT send content in the response.
And RFC 9112 indicates that Transfer-Encoding can be omitted in HEAD
Response.
The following HEAD OP is using chunked encoding and send the final chunk
HEAD /bucket?uploads RGWListBucketMultiparts_ObjStore_S3
HEAD /bucket/abc?uploadId RGWListMultipart_ObjStore_S3
HEAD / RGWListBuckets_ObjStore_S3
Clients using persistent connections, such as nginx, will be unable to handle
subsequent requests after processing such requests because the final chunk
remains in the TCP byte stream, preventing the next HTTP response from
being correctly parsed.
Ref: https://www.rfc-editor.org/rfc/rfc9110.html#section-9.3.2
https://www.rfc-editor.org/rfc/rfc9112#section-6.1-9
Signed-off-by: liubingrun <liubr1@chinatelecom.cn>
(cherry picked from commit
e63101650d43a60ae21e6c682f77175690542869)
static void dump_chunked_encoding(req_state* const s)
{
+ // omit transfer-encoding for HEAD requests so ChunkingFilter doesn't
+ // try to write the final chunk
+ if(s->op == OP_HEAD)
+ return;
try {
RESTFUL_IO(s)->send_chunked_transfer_encoding();
} catch (rgw::io::Exception& e) {