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

以下をご覧になることをお勧めします:クライアントとサーバーを書くための実践ガイド

インクリメンタル ステップで実装する必要があるのは、次のとおりです。

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

  • tiny httpd をご覧になることをお勧めします。ゼロから書きたい場合は、徹底的に RFC 2616 を読んでください。BSD ソケットを使用して、非常に低いレベルでネットワークにアクセスします。


    HTTP サーバーは概念的に単純です:

    • リッスン用にポート 80 を開く
    • 連絡があった場合、少し情報を収集します (主に取得します。残りは今のところ無視してかまいません)
    • リクエストをファイル リクエストに変換する
    • ファイルを開いてクライアントに吐き出す

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

    しかし、基本はとてもシンプルです。