2016-05-24 5 views
1

Ich arbeite auf einem HTTP-Server mit Boost, und ich habe einige Fragen über die Bildung der HTTP-Antwort, insbesondere die Kopfzeile.Erstellen einer HTTP-Antwort mit Zeichenfolgen

Hier ist der Code die GET-Antwort zu montieren:

std::string h = statusCodes[200]; // The status code is already finished with a '\r\n'                     
std::string t = "Date: " + daytime_() + "\r\n";                   
std::string s = "Server: Muffin 1.0\r\n";                    

std::string content = search->second();                     
std::string type = "Content-Type: text/html\r\n";                  
std::string length = "Content-Length: " + std::to_string(content.size()) + "\r\n";          
res = h + t + s + length + type + "\r\n" + content + "\r\n";  

Als sie auf diesen website sagen, hier ist die Header-Spezifikation:

Das Format der Anfrage- und Antwortnachrichten ähnlich sind, und Englisch-orientiert. Beiden Arten von Nachrichten bestehen aus:

  • eine Anfangszeile, kein oder mehr Kopfzeilen,
  • eine leere Zeile (dh ein CRLF von selbst),
  • und einem optionalen Nachrichtenkörper (zum Beispiel einer Datei, oder Abfragedaten oder Abfrageausgabe).

Aber wenn ich eine Anfrage auf dem Server zu tun, nur das Datum in der Kopfzeile geht, der Rest direkt in dem Inhalt

HTTP/1.1 200 OK     // Header 
Date: Tue May 24 10:28:58 2016 // Header 

Server: Muffin 1.0    // Content 
Content-Length: 31 
Content-Type: text/html 

This is supposed to be an ID 

Ich weiß nicht, was daran falsch ist, Es ist das erste Mal, dass ich mich mit HTTP-Antworten befasse.

Danke für Ihre Hilfe

+0

Neue Zeile ist nicht immer CR LF. Ich kann mich nicht erinnern, aber Referenzen einchecken. –

+0

@JacekCz Ich habe mehrere Websites überprüft und sie alle sagen, es ist eine CRLF – Bl4ckb0ne

Antwort

2

fand ich endlich den Fehler.

Meine Tagesfunktion gab eine Zeichenfolge mit einem Zeilenumbruchzeichen zurück.

Dies war die ursprüngliche Funktion, die die mit strftime

std::string 
Response::daytime_() 
{ 
    time_t rawtime; 
    struct tm * timeinfo; 
    char buffer[80]; 

    time (&rawtime); 
    timeinfo = localtime(&rawtime); 

    strftime(buffer,80,"%a %b %d %H:%M:%S %Y",timeinfo); 
    std::string time(buffer); 

    return time; 
} 

und die neuen Art und Weise depreciated ctime

std::string 
Response::daytime_() 
{ 
    std::time_t now = std::time(0); 
    return std::ctime(&now); 
} 

Und jetzt die neue Funktion verwendet die Antworten zu bilden, um nur ‚\ n mit '

std::string res = ""; 

std::string h = statusCodes[200]; 
std::string t = "Date: " + daytime_() + "\r\n"; 
std::string s = "Server: Muffin 1.0\r\n"; 

std::string content = search->second(); 
std::string type = "Content-Type: text/html\r\n"; 
std::string length = "Content-Length: " + std::to_string(content.size()) + "\r\n"; 
res = h + t + s + length + type + "\n" + content + "\r\n"; 
Verwandte Themen