2016-05-24 7 views
1

私はHTTPサーバを使って作業を進めていますが、HTTP応答の作成に関するいくつかの質問があります。文字列を使用したHTTP応答の作成

はここでGET応答組み立てるためのコードです:彼らはこのwebsiteに言うように

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";  

を、ここでは、ヘッダの仕様です:

要求メッセージと応答メッセージのフォーマットは類似しており、 英語指向です。

  • 初期ライン、ゼロ以上のヘッダ行、
  • 空行(それ自体で、すなわちCRLF)、
  • および任意のメッセージ本体(例えばファイル:メッセージの両方の種類は、から成りまたはクエリデータ、またはクエリ出力)。

私は、サーバー上の要求を行う際に、日付のみがヘッダーに行く。しかし、残りの部分は、私はそれで間違っているのか分からないコンテンツ

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 

に直接あり、私がHTTPレスポンスを扱うのは初めてです。

ご協力ありがとうございました

+0

改行は必ずしもCR LFではありません。私は覚えていないが、参照をチェックインする。 –

+0

@JacekCz私は複数のウェブサイトをチェックして、彼らはすべてそれがCRLFだと言う – Bl4ckb0ne

答えて

2

私は最終的にバグを発見しました。

私の昼間機能は、改行文字を含む文字列を返していました。

これは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; 
} 

そして、ちょうど「\ nを使用して、応答を形成するための新しい方法とdepreciated ctime

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

そして今、新しい関数を使用して、元の関数でした'

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"; 
関連する問題