理清Python网络编程
網(wǎng)絡(luò)編程
- 大綱
- 網(wǎng)絡(luò)編程基礎(chǔ)
- TCP/IP 協(xié)議
- Web 基礎(chǔ)
- HTTP協(xié)議
- Web 服務(wù)器
- WSGI 接口
- GGI
- WSGI
- Web 框架
大綱
網(wǎng)絡(luò)編程基礎(chǔ)
TCP/IP 協(xié)議
TCP/IP 協(xié)議 是最重要的兩種通信協(xié)議。TCP/IP 協(xié)議包含四個概念層。
-
應(yīng)用層:為客戶提供需要的各種服務(wù),該層主要協(xié)議有 FTP(文件傳輸協(xié)議)、Telnet(遠程登錄協(xié)議)、DNS(域名系統(tǒng)協(xié)議)、SMTP(電子郵件傳輸?shù)膮f(xié)議)等。
-
傳輸層:為應(yīng)用層實體提供端到端的通信功能,保證了數(shù)據(jù)包的順序傳送及數(shù)據(jù)的完整性,最常見的兩個協(xié)議是 傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報協(xié)議(UDP)
-
網(wǎng)絡(luò)層:主要解決主機到主機的通信問題。該層有3個主要的協(xié)議:網(wǎng)際協(xié)議(IP)、互聯(lián)網(wǎng)組管理協(xié)議(IGMP)和互聯(lián)網(wǎng)控制報文協(xié)議(ICMP)
-
鏈路層:負責監(jiān)視數(shù)據(jù)在主機和網(wǎng)絡(luò)之間的交換。TCP/IP本身并未定義該層的協(xié)議,而由參與互連的各網(wǎng)使用自己的物理層和數(shù)據(jù)鏈路層協(xié)議,然后與TCP/IP的網(wǎng)絡(luò)接入層進行連接。
傳輸層的TCP協(xié)議
Web 基礎(chǔ)
與Web 開發(fā)密切相關(guān)的是應(yīng)用層,在應(yīng)用層最主要的協(xié)議就是HTTP協(xié)議。
HTTP協(xié)議
在用戶輸入網(wǎng)址訪問明日學(xué)院網(wǎng)站的例子中,用戶瀏覽器被稱為客戶端,明日學(xué)院網(wǎng)站被稱為服務(wù)器。這個過程實質(zhì)上就是客戶端向服務(wù)器發(fā)起請求,服務(wù)器接收請求后,將處理后的信息(也稱為響應(yīng))傳給客戶端。這個過程是通過HTTP協(xié)議實現(xiàn)的。
Web 服務(wù)器
- 當在瀏覽器中輸入URL后,瀏覽器會先請求DNS服務(wù)器,獲得請求站點的IP地址(即根據(jù)URL地址www. baidu. com獲取其對應(yīng)的IP地址,如10l. 200. 85)。
- 然后發(fā)送一個HTTPRequest(請求)給擁有該IP的主機(百度的百度云服務(wù)器),接著就會接收到服務(wù)器返回的HTTP Responste(響應(yīng)),瀏覽器經(jīng)過渲染后,以一種較好的效果呈現(xiàn)給用戶。
Web 服務(wù)器的工作原理可以概括為以下4個步驟:
建立連接:客戶端通過TCP/IP協(xié)議建立到服務(wù)器的TCP連接。
請求過程:客戶端向服務(wù)器發(fā)送HTTP協(xié)議的請求包,請求服務(wù)器里的資源文檔。
應(yīng)答過程:服務(wù)器向客戶端發(fā)送HTTP協(xié)議的應(yīng)答包,如果請求的資源包含動態(tài)語言內(nèi)容,服務(wù)器會調(diào)用解釋引擎處理動態(tài)內(nèi)容,并將處理后得到的數(shù)據(jù)返回給客戶端。由客戶端解釋HTML文檔,最終在用戶屏幕上渲染顯示圖形的結(jié)果。
關(guān)閉連接:客戶端與服務(wù)器斷開。
常見的請求方法:
1、OPTIONS
返回服務(wù)器針對特定資源所支持的HTTP請求方法,也可以利用向web服務(wù)器發(fā)送‘*’的請求來測試服務(wù)器的功能性
2、HEAD
向服務(wù)器索與GET請求相一致的響應(yīng),只不過響應(yīng)體將不會被返回。這一方法可以再不必傳輸整個響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)小消息頭中的元信息。
3、GET
向特定的資源發(fā)出請求。注意:GET方法不應(yīng)當被用于產(chǎn)生“副作用”的操作中,例如在Web Application中,其中一個原因是GET可能會被網(wǎng)絡(luò)蜘蛛等隨意訪問。Loadrunner中對應(yīng)get請求函數(shù):web_link和web_url
4、POST
向指定資源提交數(shù)據(jù)進行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。 Loadrunner中對應(yīng)POST請求函數(shù):web_submit_data,web_submit_form
5、PUT
向指定資源位置上傳其最新內(nèi)容
6、DELETE
請求服務(wù)器刪除Request-URL所標識的資源
7、TRACE
回顯服務(wù)器收到的請求,主要用于測試或診斷
8、CONNECT
HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
注意:
1)方法名稱是區(qū)分大小寫的,當某個請求所針對的資源不支持對應(yīng)的請求方法的時候,服務(wù)器應(yīng)當返回狀態(tài)碼405(Mothod Not Allowed);當服務(wù)器不認識或者不支持對應(yīng)的請求方法時,應(yīng)返回狀態(tài)碼501(Not Implemented)。
2)HTTP服務(wù)器至少應(yīng)該實現(xiàn)GET和HEAD/POST方法,其他方法都是可選的,此外除上述方法,特定的HTTP服務(wù)器支持擴展自定義的方法。
服務(wù)器返回給客戶端的狀態(tài)碼:
200 OK 當您的操作將在響應(yīng)正文中返回數(shù)據(jù)時,出現(xiàn)此結(jié)果。
204 No Content 當您的操作成功,但不在響應(yīng)正文中返回數(shù)據(jù)時,出現(xiàn)此結(jié)果。
304 Not Modified(重定向) 當測試實體自上次檢索以來是否被修改時,出現(xiàn)此結(jié)果。
403 Forbidden 客戶端錯誤
401 Unauthorized 客戶端錯誤
413 Payload Too Large(客戶端錯誤) 當請求長度過長時,出現(xiàn)此結(jié)果。
400 BadRequest(客戶端錯誤) 當參數(shù)無效時,出現(xiàn)此結(jié)果。
404 Not Found(客戶端錯誤) 當資源不存在時,出現(xiàn)此結(jié)果。
405 Method Not Allowed(客戶端錯誤)由于方法和資源組合不正確而出現(xiàn)此錯誤。 例如,您不能對一個實體集合使用 DELETE 或 PATCH。
412 Precondition Failed 客戶端錯誤
501 Not Implemented(服務(wù)器錯誤) 當未實施某個請求的操作時,出現(xiàn)此結(jié)果。
503 Service Unavailable(服務(wù)器錯誤) 當 Web API 服務(wù)不可用時,出現(xiàn)此結(jié)果。
WSGI 接口
GGI
當今Web開發(fā)已經(jīng)很少使用純靜態(tài)頁面,更多的是使用動態(tài)頁面,以實現(xiàn)交互性。例如,網(wǎng)站具有登錄和注冊功能,當用戶登錄網(wǎng)站時,需要輸入用戶名和密碼,然后提交數(shù)據(jù)。
Web服務(wù)器不能處理表單中傳遞過來的與用戶相關(guān)的數(shù)據(jù),這不是Web服務(wù)器的職責。
CGI應(yīng)運而生。CGI(Common Gateway Interface,通用網(wǎng)關(guān)接口)是一段程序,運行在服務(wù)器上。Web服務(wù)器將請求發(fā)送給CGI應(yīng)用程序,再將CGI應(yīng)用程序動態(tài)生成的HIML頁面發(fā)送回客戶端。CGI在Web服務(wù)器和應(yīng)用之間充當了交互作用,這樣才能夠處理用戶數(shù)據(jù),生成并返回最終的動態(tài)HIML.頁面。
CGI的工作方式如圖3. 25所示。
WSGI
WSGI是 Web Server Gateway Interface 的縮寫。
它是 Python應(yīng)用程序(application)或框架(如 Django)和 Web服務(wù)器之間的一種接口,已經(jīng)被廣泛接受。
它是一種協(xié)議,一種規(guī)范,其是在 PEP 3333 提出的。這個協(xié)議旨在解決眾多 web 框架和web server軟件的兼容問題。有了WSGI,你不用再因為你使用的web 框架而去選擇特定的 web server軟件。
WSGI接口:
WSGI 接口有服務(wù)端和應(yīng)用端兩部分,服務(wù)端也可以叫網(wǎng)關(guān)端,應(yīng)用端也叫框架端。服務(wù)端調(diào)用一個由應(yīng)用端提供的可調(diào)用對象。如何提供這個對象,由服務(wù)端決定。例如某些服務(wù)器或者網(wǎng)關(guān)需要應(yīng)用的部署者寫一段腳本,以創(chuàng)建服務(wù)器或者網(wǎng)關(guān)的實例,并且為這個實例提供一個應(yīng)用實例。另一些服務(wù)器或者網(wǎng)關(guān)則可能使用配置文件或其他方法以指定應(yīng)用實例應(yīng)該從哪里導(dǎo)入或獲取。
WSGI 工作流程圖:
Web 框架
上邊我們了解到 WSGI 的一端是框架。
那什么是框架呢?
Web框架是用來簡化Web開發(fā)的軟件框架。事實上,框架并不是什么新技術(shù),它只是一些能夠?qū)崿F(xiàn)常用功能的Python文件。可以把框架看作是一系列工具的集合,其存在是為了避免重新發(fā)明“輪子”.以在創(chuàng)建新項目時減少開發(fā)成本。
一個典型的框架,通常會提供如下常用功能。
- 管理路由
- 支持數(shù)據(jù)庫
- 支持MVC
- 支持ORM
- 支持模板引擎
- 管理會話和Cookies
ORM MVC、模板引擎介紹
總結(jié)
以上是生活随笔為你收集整理的理清Python网络编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab 常用运算符的用法和功能
- 下一篇: Python环境下的数据库编程