diff --git a/src/http.cpp b/src/http.cpp
index be8b7396c9c249b1eac2b169b7891f942a0816c4..d4dbd81b67588d51967880062fc22481d74269ad 100644
--- a/src/http.cpp
+++ b/src/http.cpp
@@ -1007,19 +1007,25 @@ Request::onHeadersComplete() {
     // has content-length
     if (content_length_it != response_.headers.end()) {
         size_t content_length = atoi(content_length_it->second.c_str());
-        /*auto dat = conn_->read_bytes(content_length);
-        if (logger_)
+        auto dat = conn_->read_bytes(content_length);
+        /*if (logger_)
             logger_->d("[http:request:%i] response body: %zu/%zu bytes received:\n\"%.*s\"", id_, dat.size(), content_length, dat.size(), dat.data());
         if (not dat.empty()) {
             if (dat.size() == content_length)
                 dat += HTTP_HEADER_DELIM;
             http_parser_execute(parser_.get(), parser_s_.get(), dat.data(), dat.size());
         }*/
-        //if (dat.size == )
-        conn_->async_read(content_length, [wthis](const asio::error_code& ec, size_t bytes){
-            if (auto sthis = wthis.lock())
-                sthis->handle_response_header(ec, bytes);
-        });
+        if (dat.size() == content_length)
+            ctx_.post([wthis, dat=std::move(dat)]{
+                if (auto sthis = wthis.lock()) {
+                    http_parser_execute(sthis->parser_.get(), sthis->parser_s_.get(), dat.data(), dat.size());
+                }
+            });
+        else
+            conn_->async_read(content_length, [wthis](const asio::error_code& ec, size_t bytes){
+                if (auto sthis = wthis.lock())
+                    sthis->handle_response_header(ec, bytes);
+            });
         /*auto r = conn_->read_bytes(content_length);
         std::cout << "Has content length " << content_length << std::endl;
         std::cout << "Read content " << r.size() << std::endl;