HTTP reply mit gzip kompression - Brauche Hilfe :(



  • Mein kleiner HTTP/HTML Server funzt soweit einwandfrei, solange ich den reply-string ohne komprimierung an den client schicke. (z.B. Firefox)

    Die Beispiele sind etwas zusammengefasst und sollen nur die grobe Funktionsweise darstellen:

    std::vector<boost::asio::const_buffer> http_reply()
    {
      std::vector<boost::asio::const_buffer> buffers;
    
      string body("<html><head><title>Geht</title></head><body>Funktioniert perfekt!!</body></html>");
    
      // header
      string s("HTTP/1.1 200 OK\r\n");
      s += string("Content-Type: text/html\r\n");
      s += string("Content-Length: ");
      s += boost::lexical_cast<std::string>(body.size());
      s += string("\r\n");
      s += string("\r\n"); // header fertig
      buffers.push_back(boost::asio::buffer(s));
    
      // body 
      buffers.push_back(boost::asio::buffer(body));
    
      return buffers;
    }
    

    Stecke jedoch komplett fest beim Versuch das ganze mit gzip zu komprimieren, wie das bei modernen Servern halt so üblich ist.

    std::vector<boost::asio::const_buffer> http_reply()
    {
      std::vector<boost::asio::const_buffer> buffers;
    
      string body("<html><head><title>gzip Version</title></head><body>Bitte Hilfe!!!</body></html>");
    
      // kein Plan wie das hier gehen soll:
      string deflated_body = gzip_compress(body);
    
      // header
      string s("HTTP/1.1 200 OK\r\n");
      s += string("Content-Type: text/html\r\n");
      s += string("Content-Encoding: gzip\r\n")
      s += string("Content-Length: ");
      s += boost::lexical_cast<std::string>(deflated_body.size());
      s += string("\r\n");
      s += string("\r\n"); // header fertig
      buffers.push_back(boost::asio::buffer(s));
    
      // body 
      buffers.push_back(boost::asio::buffer(deflated_body));
    
      return buffers;
    }
    

    Also ich möchte gerne die funktion gzip_compress() implementieren, sodass mein http_reply korrekt an den Browser übermittelt wird. Das ganze Projekt ist auf BOOST::ASIO HTTP Server 3 aufgebaut, sollte aber hier im Beispiel keine Rolle spielen. In BOOST::IOSTREAMS hab ich schon reingeschaut, ist aber Neuland für mich.
    Das große Problem für mich ist, dass zip-Komprimierung für mich noch neu ist, und gleichzeitig ist es auch schwierig passende Beispiele hierfür zu finden.

    Kennt sich da jemand mit aus?

    Für jede Hilfe bin ich SEHR Dankbar!!!

    Schöne Grüße!!



  • Die einzig konkrete Frage die du stellst ist "kennt sich da jemand mit aus?".
    Ja. Es gibt Leute die sich da auskennen.



  • Bin ausnahmsweise etwas freundlicher als der Brummbaer.
    Genau eine Suchanfrage ergibt mir:
    http://www.boost.org/doc/libs/1_35_0/libs/iostreams/doc/classes/zlib.html#basic_zlib_compressor


Anmelden zum Antworten