1. 程式人生 > 程式設計 >淺析Python 中的 WSGI 介面和 WSGI 服務的執行

淺析Python 中的 WSGI 介面和 WSGI 服務的執行

HTTP格式
HTTP GET請求的格式:

GET /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

每個Header一行一個,換行符是\r\n

HTTP POST請求的格式:

POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

body data goes here...

當遇到連續兩個\r\n時,Header部分結束,後面的資料全部是Body。

HTTP響應的格式:

200 OK
Header1: Value1
Header2: Value2
Header3: Value3

body data goes here...

HTTP響應如果包含body,也是通過\r\n\r\n來分隔的。需注意,Body的資料型別由Content-Type頭來確定,如果是網頁,Body就是文字,如果是圖片,Body就是圖片的二進位制資料。

當存在Content-Encoding時,Body資料是被壓縮的,最常見的壓縮方式是gzip。

WSGI介面
WSGI:Web Server Gateway Interface。

WSGI介面定義非常簡單,只需要實現一個函式,就可以響應HTTP請求。

# hello.py

def application(environ,start_response):
  start_response('200 OK',[('Content-Type','text/html')])
  body = '<h1>Hello,%s!</h1>' % (environ['PATH_INFO'][1:] or 'web')
  return [body.encode('utf-8')]

函式接收兩個引數:

  • environ:一個包含所有HTTP請求資訊的dict物件;
  • start_response:一個傳送HTTP響應的函式。

執行WSGI服務
Python內建了一個WSGI伺服器,這個模組叫wsgiref,它是用純Python編寫的WSGI伺服器的參考實現。

# server.py

from wsgiref.simple_server import make_server
from hello import application

# 建立一個伺服器,IP地址為空,埠是8000,處理函式是application:
httpd = make_server('',8000,application)
print('Serving HTTP on port 8000...')
# 開始監聽HTTP請求:
httpd.serve_forever()

在命令列輸入python server.py即可啟動WSGI伺服器。

啟動成功後,開啟瀏覽器,輸入http://localhost:8000/,即可看到結果。

Ctrl+C可以終止伺服器。

以上就是淺析Python 中的 WSGI 介面和 WSGI 服務的執行的詳細內容,更多關於Python WSGI介面和WSGI服務的資料請關注我們其它相關文章!