43357


[ http.serverモジュール](https://docs.python.jp/3/library/http.server.html#module-
http.server)の位置付けと役割が分からないのですが、

* * *

**Q1.これは何ですか？**  
・シンプルなWebサーバ？ シンプルの意味は？  
・開発用ローカルサーバ？ 外部公開は出来ない？

* * *

**Q2.Nginxと比較した場合**  
・Nginxに代わるもの？  
・Nginxと併用するもの？

* * *

**Q3.起動について**  
・コマンド入力が必要？  
・常時起動し続けることは出来ない？

* * *

**Q4.PythonでWebサーバを立てる意味**  
・このモジュールはPythonで書かれているのでしょうか？  
・もうそうだとしたら、PythonでWebサーバを作る意味は何ですか？  
・学習用途？  
・Pythonで「HTTP (web) サーバを実装するためのクラスを提供する」意図は何かあると思うのですが…  
・[GoでWebサーバを立てる意味も分からない](https://ja.stackoverflow.com/questions/40101/go%E3%81%A7web%E3%82%B5%E3%82%A4%E3%83%88%E3%82%92%E5%85%AC%E9%96%8B%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E6%88%90%E3%81%AE%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)のですが、PythonでWebサーバを立てる意味も分かりません


CC BY-SA 3.0
2018-04-18T02:25:33.520
43340
2018-04-19T05:10:03.107
2018-04-19T05:10:03.107
19110
7886
question
python
http.serverモジュールの位置付けと役割


> 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`は"おまけ"の実装です。


CC BY-SA 3.0
2018-04-18T14:33:32.020
43357
2018-04-18T14:41:43.570
2018-04-18T14:41:43.570
49
49
43340
answer