diff --git a/Services/RequestServer/ConnectionFromClient.cpp b/Services/RequestServer/ConnectionFromClient.cpp index 914aba69510..aef96868b54 100644 --- a/Services/RequestServer/ConnectionFromClient.cpp +++ b/Services/RequestServer/ConnectionFromClient.cpp @@ -631,6 +631,13 @@ void ConnectionFromClient::check_active_requests() auto result_code = msg->data.result; + // HTTPS servers might terminate their connection without proper notice of shutdown - i.e. they do not send + // a "close notify" alert. OpenSSL version 3.2 began treating this as an error, which curl translates to + // CURLE_RECV_ERROR in the absence of a Content-Length response header. The Python server used by WPT is one + // such server. We ignore this error if we were actually able to download some response data. + if (result_code == CURLE_RECV_ERROR && request->downloaded_so_far != 0 && !request->headers.contains("Content-Length"sv)) + result_code = CURLE_OK; + Optional network_error; bool const request_was_successful = result_code == CURLE_OK; if (!request_was_successful) {