3

私はpython3でかなり単純なhttpWebサーバーを書いています。Webサーバーはシンプルである必要があります-設定ファイルなどからの基本的な読み取りのみです。私は標準ライブラリのみを使用していますが、今のところはかなり問題なく動作します。

このプロジェクトの要件は1つだけで、自分で実装することはできません。仮想ホストです。構成ファイルで定義された少なくとも2つの仮想ホストが必要です。問題は、Pythonでそれらを実装する方法が見つからないことです。誰かがガイド、記事、おそらくこれを行うための簡単な実装を持っていますか?

助けていただければ幸いです。

4

2 に答える 2

10

仮想ホストは、HTTPリクエストのHost:ヘッダーに従うことで機能します。

リクエストのヘッダーを読み取り、Host:ヘッダーの値に基づいてアクションを実行するだけです。

于 2009-04-23T12:22:59.330 に答える
5

単純なHTTPWebサーバーの場合、WSGIリファレンス実装から始めることができます。

wsgirefは、WSGIサポートをWebサーバーまたはフレームワークに追加するために使用できるWSGI仕様のリファレンス実装です。WSGI環境変数と応答ヘッダーを操作するためのユーティリティ、WSGIサーバーを実装するための基本クラス、WSGIアプリケーションにサービスを提供するデモHTTPサーバーなどを提供します。

サンプルサーバーを変更してHTTP_HOSTヘッダーを確認します。これは、仮想ホストに応じて、異なるテキストで応答する単純なアプリです。(構成ファイルを使用するように例を拡張することは、演習として残されています)。

import wsgiref
from wsgiref.simple_server import make_server

def my_app(environ,start_response):
    from io import StringIO
    stdout = StringIO()
    host = environ["HTTP_HOST"].split(":")[0]
    if host == "127.0.0.1":
        print("This is virtual host 1", file=stdout)
    elif host == "localhost":
        print("This is virtual host 2", file=stdout)
    else:
        print("Unknown virtual host", file=stdout)

    print("Hello world!", file=stdout)
    print(file=stdout)
    start_response(b"200 OK", [(b'Content-Type',b'text/plain; charset=utf-8')])
    return [stdout.getvalue().encode("utf-8")]

def test1():
    httpd = make_server('', 8000, my_app)
    print("Serving HTTP on port 8000...")

    # Respond to requests until process is killed
    httpd.serve_forever()
于 2009-06-07T09:36:36.377 に答える