web-dev-qa-db-ja.com

Cで簡単なHTTPサーバーを構築する

Cで簡単なHTTPサーバーを作成する必要があります。ガイダンスはありますか?リンク?サンプル?

103
Nathan H

tiny httpd をご覧になることをお勧めします。ゼロから作成したい場合は、徹底的にread RFC 2616 にする必要があります。 BSD sockets を使用して、非常に低いレベルでネットワークにアクセスします。

82
Adam Rosenfield

以下をご覧になることをお勧めします。 クライアントおよびサーバー作成の実践ガイド

増分ステップで実装する必要があるのは次のとおりです。

  1. 基本的なTCPソケットレイヤーを実行します(ポートでリッスンし、クライアント接続を受け入れ、データを送受信します)。
  2. 一度に1行(CRLFで区切られた)の要求を読み取ることができるように、バッファー付きリーダーを実装します。
  3. 最初の行を読んでください。メソッド、リクエストバージョン、パスを解析します。
  4. 「Header:value」構文のヘッダー解析を実装します。折りたたまれたヘッダーを展開することを忘れないでください。
  5. 要求メソッド、コンテンツタイプ、およびコンテンツサイズを確認して、本文の読み取り方法/読み取り方法を決定します。
  6. コンテンツタイプに基づいてコンテンツのデコードを実装します。
  7. HTTP 1.1をサポートする場合は、「100 Continue」、キープアライブ、チャンク転送などを実装します。
  8. 不完全なリクエストの検出、クライアントの最大数の制限などの堅牢性/セキュリティ対策を追加します。
  9. コードをシュリンクラップして、オープンソースにしてください:)
116
Ates Goral

HTTPサーバーは概念的にシンプルです。

  • リスニング用にポート80を開く
  • 連絡が取れたら、少し情報を収集します(主に取得します-残りは今のところ無視できます)
  • 要求をファイル要求に変換します
  • ファイルを開き、クライアントで吐き出します

サポートするHTTPの量によってはさらに難しくなります。POSTは、スクリプト、複数の要求の処理など、もう少し複雑です。

しかし、ベースは非常に単純です。

26
Adam Davis

Mongoose (以前のSimple HTTP Daemon)はかなり良いです。特に、Windows、Windows CE、およびUNIXで埋め込みおよびコンパイルが可能です。

25
Bob Nadler

ポート80でTCPソケットを開き、新しい接続のリッスンを開始し、 this を実装します。目的に応じて、ほとんどすべてを無視できます。最も簡単な方法として、すべてのリクエストに対して同じレスポンスを送信できます。これには、ソケットへのテキストの書き込みが含まれます。

12
Eclipse

Nweb(NigelのWebサーバー)を見てください。「わずか200行のCソースコードを備えた小さな安全なWebサーバー[...]」:

https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing http://www.ibm.com/developerworks/systems/library/es-nweb/

この記事には、擬似コード、説明、およびコメントが含まれています。

編集:IBMのリンクが終了しました。ウェブページのPDFをGoogleドライブに保存しました。コードのダウンロードは次のとおりです。

https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing

@ ankushagarwal がいくつかの変更を加え、GitHubにバージョンをアップロードしました: https://github.com/ankushagarwal/nweb

11
XP1

私はあなたが使用できる私自身を書きました。これはsqliteが機能し、スレッドセーフであり、UNIX用のC++で動作します。

分解して、C互換コードを使用できるはずです。

http://code.google.com/p/mountain-cms/

5
Daniel A. White

HTTP仕様 および Firebug は、my宿題。

あなたの幸運を祈ります。 :)

5

lighttpd のようなソースを参照することをお勧めします。

4
warren

http://www.manning.com/hethmon/ -マニングの「Paul S. HethmonによるHTTPへの図解ガイド」は、HTTPプロトコルを学ぶのに非常に優れた本であり、誰かにとって非常に役立つでしょう。それを実装/拡張します。

2
anjanb

Apache のように、プラットフォーム固有のソケット関数を使用してHTTPプロトコルをカプセル化します。

1
arul

より多くの応答がある複製 があります。

まだ言及されていない候補の1つは、 spserver です。

1
akauppi