# [基礎系列]WSGI與ASGI/Application Server與Web Server --- # WSGI(Web Server Gateway Interface,網站伺服器閘道介面) > 假設你有使用Python Web Framework開發的Developer可能會有聽過看過WSGI與ASGI WSGI是一個協定定義,Web Server與Python Web Application 之間的規範,WSGI規範讓開發者會比較彈性 WSGI類似請求者與Server之間的Midderwale 中繼器 --- ## WSGI Server 指符合WSGI的Server Python Web上可能比較常見的有 uwsgi,gunicorn ## 使用WSGI的理由 平常我們可能會用Nginx,IIS,Apache 去來擔任我們的Web Server,但是Web Server無法去啟動我們的Python Web Application,也就是說Nginx這類Web Server 無法實現WSGI規範,所以需要透過WSGI Server來完成WSGI **延伸議題: 我的系統架構中並沒有WSGI好像也可以跑?** 事實上Django/Flask都有自帶WSGI Server的功能所以才會產生這種錯覺,不過內建的WSGI Server通常部會出現在Production 環境中,多半為測試用。 **延伸議題: 那為甚麼我的Application也需要Web Server?** 使用Web Serve也能提高一些在操作系統上的效能,像靜態的請求事實上Web Server處理的效率會比WSGI Server好一點大概歸類一下Web Server的優點: 1. Cache: 可以減少Response等待時間,效能感覺上更快 2. Static File: 靜態檔案處理 3. Load Balance: 負載平衡 4. Reverse Proxy(Nginx): 外部請求並不適直接訪問內部而是透過Proxy來接收Request與發送Response,像是一個中繼站一樣。 --- ### Web Server與Application Server差異 ---- #### Web Server Web Server:只能拿來處理靜態資源,負載平衡、代理,所謂動態的資源,是指會把需求轉發到程式語言起的 Application Server, ---- ##### Static/Dynamic Web Server Static Web Server 靜態網頁伺服器: 只需要負責簡易的非動態元素與資訊,如不會改變檔案內容的HTML檔案。 Dynamic Web Server 動態網頁伺服器: 除了擁有靜態網頁伺服器的功能外加上動態改變元素的功能,如在網頁上加入系統資料等等。 ---- #### Application Server Application Server: Application Server接受從Web Server來的請求後處理完,再丟 response 回去,由 Web Server 進行回應,最後才回到 Client 端。 --- # ASGI(Asynchronous Server Gateway Interface,異步伺服器閘道介面) ASGI是WSGI的後者,WSGI Server可以直接裝在ASGI Server上,專門給同步/非同步Application提供標準,支援的協議有些WSGI不支援,支援一些較新的協議,是多種通訊協定如HTTP,WebSocket對應到Python Application之間的Interface 流程圖 ![](https://i.imgur.com/7NsxbvS.png) 實際流程 ![](https://i.imgur.com/zlpKtnr.png)
{"metaMigratedAt":"2023-06-17T18:23:52.251Z","metaMigratedFrom":"YAML","title":"[基礎系列]WSGI與ASGI/Application Server與Web Server","breaks":true,"contributors":"[{\"id\":\"4c8f8799-9dcd-430b-b7bc-8a5156d39d0b\",\"add\":1703,\"del\":19}]"}
    1707 views