2016-11-24 19 views
0

すべてのページが保護されているが、認証が別のソケット接続/プロトコルで完了している、非常に基本的なWebサーバを開発しようとしています。帯域外認証を使用するlibmicrohttpdベースのサーバ

私はこのためにlibmicrohttpdを使用しようとしていると私は最後に持って望んでいるプロセスは次のとおりです。

  1. ランディングページがリンクされているすべてのための最初の接続

  2. 要求に表示されていますページはhttp 102メッセージを生成します(認証要求の処理中にHTTP 403メッセージとタイムアウトによる認証要求を回避するため)

  3. 帯域外認証プロセスは、ウェブサーバ

  4. 認証プロセスが復帰、私はこのレベルでlibmicrohttpdとHTTP devの両方に少し新たなんだと私はちょうどでrespsosneを送ることができると思っていた結果

に基づいて適切なメッセージを送ります102のステータスコード

ret = MHD_queue_response (connection, MHD_HTTP_PROCESSING, response); 

は、後にちょうど同じ関数呼び出しでMHD_HTTP_OKに変化最終応答を送ります。しかし、たとえ2つの応答を待ち行列に入れても、その間に他の処理(または何らかの遅延がある)がない場合でも、クライアントは2番目の応答を受信せず、最終的にタイムアウトします。

私は思ったんだけど:

  • HTTPステータスコードの問題がありますか?あるいは、http 102以降、最終的にhttp 200またはそれ以外の場合、より多くの応答を送信することが一貫していますか?
  • このような同じクライアントに追加の応答をキューイングするときに使用する必要がある別のMHD機能またはオプションはありますか?
  • これをサポートするためにセットアップされたデーモンで何か特別なことはありますか?
  • もちろん、これはこのようにすることができますか、そうするべきであるということを完全に根拠がありませんか?参考のため

、私のデーモンは(最初のチュートリアルの例から)オプションの最も基本的で設定されています

daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY, port, NULL, 
       NULL, &generate_page, NULL, MHD_OPTION_END); 

私はちょうど応答でhtmlファイルをサーブした場合、すべてがそうでなければ動作します。

私がどこに行くか教えてくれても、どんなアドバイスもありがたいです。

+0

私の主な問題は、HTTP 102のためにクライアントブラウザに実際に何も表示されなくても、私は両方の呼び出しで同じ応答を再利用しようとしていたことです。 HTTP 200 MHDで実際の応答を待ち行列に入れようとしていましたが、私がアクセスしようとしていた応答を既に削除していました。 私は質問を開いたままにして、誰かがそれを読んでいる人が他の質問/ポイントについてアドバイスやパースペクティブを持っているかどうかを確認します。 – dt647146

答えて

0

プライマリ問題は、HTTP 102のためにクライアントブラウザに実際に何も表示されなくても、MHD_queue_responseの両方の呼び出しで同じ応答を再利用しようとしていたことでした。したがって、実際のHTTP 200 MHDの応答では、私がアクセスしようとしていた応答をすでに削除していました。これは、ダミーの応答を使用するか、応答を永続的にすることで解決できました。

関連する問題