それでは毛玉諸君、これにて失敬

日々の精進を備忘録的に綴ります。

ふつうのLinuxプログラミング4

HTTPサーバを作る

wwwの仕組み

  • webページはHTMLを使って記述される
  • webブラウザは対象サーバの指定ポートにTCPソケットをつなぎ、通信を試みる
    • ソケット: ストリームをそこに接続することのできる口
  • TCP接続が完了すると、HTTPサーバプロセスとHTTPクライアントプロセス(webブラウザ)の間にストリームが構築される
  • HTMLの中身が全て渡された時点でTCPストリームが切断(close)される

HTTP

  • クライアントだけ書いている部分: HTTPリクエス
    • このURL之データがほしい!と要求
  • サーバだけ書いている部分: HTTPレスポンス
    • 要求に対するレスポンス

HTTPサーバの概略

  • HTTPの仕組みとファイルシステムはとても似ている
    • URL <=> パス
    • GET <=> catコマンド
    • HEAD <=> stat(2)
    • POST <=> コマンド実行
  • 普通、サーバのファイルシステムが丸見えだと色々困るのでHTTPで公開されるのは一部だけ
    • ドキュメントツリーといい、ドキュメントツリーのルートディレクトリをドキュメントルートという
    • 我々のHTTPサーバの仕事は、HTTPリクエストをドキュメントルート以下のファイルにマップし、レスポンスとして送り返す

感想

自分はお仕事としてデータ分析に携わっており、正直Linuxの仕組みは後回しでよいと思ってました(実際この本は1年以上前に購入して寝かせていた)。
が、この本に書かれていた内容、概念はこれまで何度も出会ったことがあるなぁと感じました。
例えば、、、

  • ストリームという概念があるけど、AWSにもDynamoDB streamというサービスあったな。あれと一緒か〜
  • コマンドをつなぐパイプ、プロセスとプロセスをつなぐストリームということか〜
  • TCPが何か分からなかったけど、ストリームでやりとりしているように見せるためのプロトコルなのか〜

などなど。プロセス、ファイルシステム、ストリームの基本概念の組み合わせで様々な処理が表現されているのは面白いなと思いました。
演習はC言語かけないのでとてもしんどかったです。所々端折ってしまったのでC言語について調べてから再チャレンジしたいです(というか最初からそうすべきでした)。