Bladeren bron

fix: 1xx 204 304 no need Content-Length (#569)

ithewei 9 maanden geleden
bovenliggende
commit
06cea34e1a
2 gewijzigde bestanden met toevoegingen van 15 en 1 verwijderingen
  1. 14 1
      http/HttpMessage.cpp
  2. 1 0
      http/HttpMessage.h

+ 14 - 1
http/HttpMessage.cpp

@@ -401,6 +401,19 @@ append:
     return;
 }
 
+bool HttpMessage::NeedContentLength() {
+    if (type == HTTP_RESPONSE) {
+        HttpResponse* res = (HttpResponse*)(this);
+        if (res->status_code / 100 == 1 ||
+            res->status_code == HTTP_STATUS_NO_CONTENT ||
+            res->status_code == HTTP_STATUS_NOT_MODIFIED) {
+            return false;
+        }
+        return true;
+    }
+    return false;
+}
+
 void HttpMessage::FillContentLength() {
     auto iter = headers.find("Content-Length");
     if (iter != headers.end()) {
@@ -411,7 +424,7 @@ void HttpMessage::FillContentLength() {
         content_length = body.size();
     }
     if (iter == headers.end() && !IsChunked() && content_type != TEXT_EVENT_STREAM) {
-        if (content_length != 0 || type == HTTP_RESPONSE) {
+        if (content_length != 0 || NeedContentLength()) {
             headers["Content-Length"] = hv::to_string(content_length);
         }
     }

+ 1 - 0
http/HttpMessage.h

@@ -253,6 +253,7 @@ public:
     void FillContentType();
     // body.size -> content_length <-> headers["Content-Length"]
     void FillContentLength();
+    bool NeedContentLength();
 
     bool IsChunked();
     bool IsKeepAlive();