diff --git a/packages/bun-uws/src/HttpResponse.h b/packages/bun-uws/src/HttpResponse.h index 03c82ca77d..a4b85a2053 100644 --- a/packages/bun-uws/src/HttpResponse.h +++ b/packages/bun-uws/src/HttpResponse.h @@ -125,6 +125,10 @@ public: } } + if (httpResponseData->state & HttpResponseData::HTTP_WROTE_TRANSFER_ENCODING_HEADER) { + allowContentLength = false; + } + /* if write was called and there was previously no Content-Length header set */ if (httpResponseData->state & HttpResponseData::HTTP_WRITE_CALLED && !(httpResponseData->state & HttpResponseData::HTTP_WROTE_CONTENT_LENGTH_HEADER) && !httpResponseData->fromAncientRequest) { diff --git a/packages/bun-uws/src/HttpResponseData.h b/packages/bun-uws/src/HttpResponseData.h index 26c3428049..1870cdb69c 100644 --- a/packages/bun-uws/src/HttpResponseData.h +++ b/packages/bun-uws/src/HttpResponseData.h @@ -87,6 +87,7 @@ struct HttpResponseData : AsyncSocketData, HttpParser { HTTP_CONNECTION_CLOSE = 16, // used HTTP_WROTE_CONTENT_LENGTH_HEADER = 32, // used HTTP_WROTE_DATE_HEADER = 64, // used + HTTP_WROTE_TRANSFER_ENCODING_HEADER = 128, // used }; /* Shared context pointer */ diff --git a/src/bun.js/bindings/NodeHTTP.cpp b/src/bun.js/bindings/NodeHTTP.cpp index 29eca691c0..4e31e65867 100644 --- a/src/bun.js/bindings/NodeHTTP.cpp +++ b/src/bun.js/bindings/NodeHTTP.cpp @@ -1038,6 +1038,11 @@ static void writeFetchHeadersToUWSResponse(WebCore::FetchHeaders& headers, uWS:: } } + // Prevent automatic Date header insertion when user provides one + if (header.key == WebCore::HTTPHeaderName::TransferEncoding) { + data->state |= uWS::HttpResponseData::HTTP_WROTE_TRANSFER_ENCODING_HEADER; + } + // Prevent automatic Date header insertion when user provides one if (header.key == WebCore::HTTPHeaderName::Date) { data->state |= uWS::HttpResponseData::HTTP_WROTE_DATE_HEADER;