一個cs模型是由伺服器和客戶端組成,大多相互情況下也就是伺服器端和瀏覽器之間的通信。通過瀏覽器請求伺服器,然後伺服器再響應瀏覽器。 那麼如果瀏覽器想要請求一個python文件,例如http://127.0.0.1:8000/time.py/那麼該如何實現。 首先如果瀏覽器只請求類似index.htm ...
一個cs模型是由伺服器和客戶端組成,大多相互情況下也就是伺服器端和瀏覽器之間的通信。通過瀏覽器請求伺服器,然後伺服器再響應瀏覽器。
那麼如果瀏覽器想要請求一個python文件,例如http://127.0.0.1:8000/time.py/那麼該如何實現。
首先如果瀏覽器只請求類似index.html的時候只要server中擁有這個index.html。並且構建一個“狀態碼+響應頭+“\r\n”+響應體”將index.html的源代碼作為響應體傳入瀏覽器就可以實現靜態頁面的請求響應。
首先有這樣一個想法構建一個類似請求靜態頁面的那樣一個響應字元串。將響應體作為python程式的返回值傳入瀏覽器會有什麼樣的結果。如下圖
也就是說這是沒辦法實現和我們想象的中的那樣。
引入介面這個概念,前輩們的不懈努力完成了wsgi協議。也就是只要我們可以實現wsgi介面然後通過伺服器來調用這個介面就可以實現瀏覽器請求python文件。
python程式(ctime.py):
import time
def application(env,start_response):
stauts = "200 ok"
headers = [("Content-Type","text/plain")]
start_response(stauts,headers)
return time.ctime()
server端(偽代碼):
def start_response(self,statu_num,response_headers):
self.response_statu_num = statu_num
response_header = “”
for header in response_headers:
response_header += “%s: %s”%(header)
self.response_headers = response_header
def handla_file(self):
ctime = __import__(模塊名)
response_body = ctime.application(environ,start_response)
response_data= response_statu_num+response_headers+”\r\n”+response_body
client_socket.send(bytes(response_data,”utf-8”))