diff --git a/lib/transfer.c b/lib/transfer.c
index 159151f599fae992fd5738c01b9edc659d13eee9..a47fa1c579ec8ed996b67b9f48f02ab2e400a110 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -424,14 +424,22 @@ CURLcode Curl_readwrite(struct connectdata *conn,
                    server keeps it open for us! */
                 conn->bits.close = TRUE;
 
-              if (k->httpcode == 304)
-                /* (quote from RFC2616, section 10.3.5):
-                 *  The 304 response MUST NOT contain a
-                 * message-body, and thus is always
-                 * terminated by the first empty line
-                 * after the header fields.
-                 */
+              switch(k->httpcode) {
+              case 204:
+                /* (quote from RFC2616, section 10.2.5): The server has
+                 * fulfilled the request but does not need to return an
+                 * entity-body ... The 204 response MUST NOT include a
+                 * message-body, and thus is always terminated by the first
+                 * empty line after the header fields. */
+                /* FALLTHROUGH */
+              case 304:
+                /* (quote from RFC2616, section 10.3.5): The 304 response MUST
+                 * NOT contain a message-body, and thus is always terminated
+                 * by the first empty line after the header fields.  */
                 conn->size=0;
+              default:
+                /* nothing */
+              }
             }
             else {
               k->header = FALSE;	/* this is not a header line */