1

dlib ライブラリ ( http://dlib.net/network.html#server_http )を使用して Web サイトをインターフェイスとして使用するために、C++ プログラムに小さな http サーバーを実装しようとしました。このコードがすべきことは、要求に応じて入力 html ファイルを読み取り、それを返すことです。

class web_server : public server_http
{
    const std::string on_request ( 
        const incoming_things& incoming,
        outgoing_things& outgoing
    )
    {
        ostringstream sout;
        sout<<get_file_contents("Seite.html");
        return sout.str();
    }

};

それは機能しますが、私のブラウザには javascript/css 要素のないプレーンな html サイトだけが表示されます。これらは、次の方法で html ファイルに統合されます。

   <script type="text/javascript" src="scripte.js")>
   </script>
   <link rel="stylesheet" type="text/css" href="Style.css"> 

ブラウザで直接開くと、htmlは問題なく見えます。前もって感謝します

編集: Davis King に感謝します。CSS はまだ機能していませんが、少なくとも JavaScript は機能しています。要求されたファイルを文字列として送信する一般的な応答を入れることができました: on_request の本文:

ostringstream sout;
sout<<get_file_contents("Seite.html");
cout << "request path: " << incoming.path << endl;
string filename=incoming.path.substr(1,incoming.path.length()); 
if (incoming.path.substr(0,1) == "/" && incoming.path.length()>1) return get_file_contents(filename.c_str());
return sout.str();

再編集:今は動作します。Chrome からヒントがありました。スタイルシート ファイルの MIME タイプは text/html ですが、本来は text/css である必要があります。それに応じて応答方法を変更したところ、現在は機能しています。

if (incoming.path=="/Style.css") outgoing.headers["Content-Type"] == "text/css";

フォローアップの質問として: css ファイルと js ファイルがリクエストをトリガーし、html で参照した画像がトリガーされないのはなぜですか? とにかくどうもありがとう、私はあなたに賛成票を投じたいと思いますが、残念ながらできません...

4

1 に答える 1

0

ブラウザーは、Web サーバーから Style.css および scripte.js ファイルを要求しようとしていますが、あなたが書いた方法では、Seite.html ファイルでしか応答しません。したがって、次のようなものを on_request メソッドに追加する必要があります。

cout << "request path: " << incoming.path << endl;
if (incoming.path == "/scripte.js")
    return get_file_contents("scripte.js");
else if (incoming.path == "/Style.css")
    return get_file_contents("Style.css");
于 2013-03-14T21:28:04.940 に答える