diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index c410f923423f5b893b2c5efabe840f86f11ae89d..a48d7ae0a1afb08bdc22b24552dae9c4848bf021 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -738,6 +738,12 @@ BOOL WINAPI HttpAddRequestHeadersA(HINTERNET hHttpRequest,
 static void HTTP_DrainContent(LPWININETHTTPREQW lpwhr)
 {
     DWORD bytes_read;
+
+    if (!NETCON_connected(&lpwhr->netConnection)) return;
+
+    if (lpwhr->dwContentLength == -1)
+        NETCON_close(&lpwhr->netConnection);
+
     do
     {
         char buffer[2048];
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 06611c8405f3b88f84fccd42723c8160b843e601..4d48089bf4e59e70843118a6c909fc801cd1ab32 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -1724,7 +1724,7 @@ BOOL INTERNET_ReadFile(LPWININETHANDLEHEADER lpwh, LPVOID lpBuffer,
             {
                 lpwhr->dwContentRead += bytes_read;
                 *pdwNumOfBytesRead = bytes_read;
-                if (!bytes_read)
+                if (!bytes_read && (lpwhr->dwContentRead == lpwhr->dwContentLength))
                     retval = HTTP_FinishedReading(lpwhr);
                 else
                     retval = TRUE;
diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c
index 892696886abce58db0c2c801acb9b05a8b8416af..3cf58415958b314507415646095a21ae5b4165b4 100644
--- a/dlls/wininet/tests/http.c
+++ b/dlls/wininet/tests/http.c
@@ -444,6 +444,7 @@ static void InternetReadFileExA_test(int flags)
 
         length += inetbuffers.dwBufferLength;
     }
+    ok(length > 0, "failed to read any of the document\n");
     trace("Finished. Read %d bytes\n", length);
 
 abort: