質問: http.serverモジュールの位置付けと役割が分からないのですが、 --- **Q1.これは何ですか?** ・シンプルなWebサーバ? シンプルの意味は? ・開発用ローカルサーバ? 外部公開は出来ない? --- **Q2.Nginxと比較した場合** ・Nginxに代わるもの? ・Nginxと併用するもの? --- **Q3.起動について** ・コマンド入力が必要? ・常時起動し続けることは出来ない? --- **Q4.PythonでWebサーバを立てる意味** ・このモジュールはPythonで書かれているのでしょうか? ・もうそうだとしたら、PythonでWebサーバを作る意味は何ですか? ・学習用途? ・Pythonで「HTTP (web) サーバを実装するためのクラスを提供する」意図は何かあると思うのですが... ・GoでWebサーバを立てる意味も分からないのですが、PythonでWebサーバを立てる意味も分かりません
回答: > > Q1.これは何ですか? > > ・シンプルなWebサーバ? シンプルの意味は? > > > HTTPサーバ実装において、必要最低限の機能しか提供しません。最も基本的なな`BaseHTTPRequestHandler`の場合: * TCPポートを開いてクライアントからの接続を待機する * 受信したHTTP要求メッセージのヘッダ部を解釈する * HTTP応答メッセージをクライアントへ送信する これ以上の機能は何も提供されません。いわゆるWebサーバとして成り立たせるには、少なくともサーバ上のファイル内容を読込むといった処理が必要となりますが、それはあなたの仕事になります。 さすがに...という話であれば、`SimpleHTTPRequestHandler`がまさに「HTTP要求に対応したファイルを開いてHTTP応答として内容を返す」ところまで担当してくれます。 > > ・開発用ローカルサーバ? 外部公開は出来ない? > > > 用途は限定されません。技術的には外部公開も可能ですが、セキュリティ上好ましいかという別の判断基準はあります。(おすすめはしません) > > Q2.Nginxと比較した場合 > > ・Nginxに代わるもの? > > ・Nginxと併用するもの? > > > 見方によっては、`SimpleHTTPRequestHandler`は **超**低機能版 Nginx ともいえます。 真面目に運用するならば、Nginxとの併用が現実的と思われます。「リバースプロキシ(Reverse Proxy)」などの単語で調べてください。 > > Q3.起動について > > ・コマンド入力が必要? > > ・常時起動し続けることは出来ない? > > > (質問意図が不明です。単なる機能モジュール=ソフトウエア部品にすぎません。) > > Q4.PythonでWebサーバを立てる意味 > > ・このモジュールはPythonで書かれているのでしょうか? > > ・もうそうだとしたら、PythonでWebサーバを作る意味は何ですか? > > ・学習用途? > > ・Pythonで「HTTP (web) サーバを実装するためのクラスを提供する」意図は何かあると思うのですが... > > > `SimpleHTTPRequestHandler`を開発中のお手軽Webサーバとして使うことはあります。 `BaseHTTPRequestHandler`はREST APIのエンドポイント実装に便利です。 > > ・GoでWebサーバを立てる意味も分からないのですが、PythonでWebサーバを立てる意味も分かりません > > > ApacheやNginxのような「Webサーバ」ではなく、「HTTPプロトコルの受信/送信を実現するソフトウェア部品」という解釈が妥当です。 どちらかといえば`BaseHTTPRequestHandler`が本モジュールの存在意義であり、`SimpleHTTPRequestHandler`は"おまけ"の実装です。