WSGI全名是"Web Server Gateway Interface",就是一個規範python server的interface。
傳統Web server如Apache+php會直接在runtime處理請求並return response,但python server通常只能長run一個python process,這樣會造成server脆弱,容易crash等等壞處。
但要配上Apache/nginx這些server,它們不會知道你的application怎樣運作,必須有個統一規範:WSGI。
簡單來說在WSGI架構底下,你的python server(WSGI Application)不會直接接收requests,而是會有多一層server(WSGI server)。
例子
假設你的server由以下部分組成:
- Web proxy (nginx/apache...)
- WSGI server (gunicorn/uWSGI...)
- Python server (django/flask...)
WSGI有兩部分協議:
- For WSGI server: 當你處理任何incoming requests,你可以call這些function。
- For python server: 你需要提供這些function給WSGI server。
最基本的WSGI Application:
# wsgi.py
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return ["Hello!"]
然後WSGI server就可以call application(environ, start_response)
去處理requests。
當然你的python server不會這麼簡單,所以django等frameworks會幫你自動處理好成為一個WSGI application。