我在python3中编写了一个相当简单的http web服务器。 Web服务器需要很简单 - 只能从配置文件等基本读取。我只使用标准库,现在它工作得相当好。
这个项目只有一个要求,我不能自己实现 - 虚拟主机。我需要至少有两个虚拟主机,在配置文件中定义。问题是,我找不到如何在python中实现它们的方法。有没有人有任何指南,文章,也许一些简单的实现如何做到这一点?
如果有任何帮助,我将不胜感激。
答案 0 :(得分:10)
虚拟主机通过服从HTTP请求中的Host:头来工作。
只需读取请求的标头,然后根据Host:header
的值执行操作答案 1 :(得分:5)
对于简单的HTTP Web服务器,您可以从WSGI reference implementation开始:
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()