![第2章-網(wǎng)頁前端基礎(chǔ)_第1頁](http://file4.renrendoc.com/view12/M02/09/34/wKhkGWb6A9aAQ9XuAAEWWrMkv5I934.jpg)
![第2章-網(wǎng)頁前端基礎(chǔ)_第2頁](http://file4.renrendoc.com/view12/M02/09/34/wKhkGWb6A9aAQ9XuAAEWWrMkv5I9342.jpg)
![第2章-網(wǎng)頁前端基礎(chǔ)_第3頁](http://file4.renrendoc.com/view12/M02/09/34/wKhkGWb6A9aAQ9XuAAEWWrMkv5I9343.jpg)
![第2章-網(wǎng)頁前端基礎(chǔ)_第4頁](http://file4.renrendoc.com/view12/M02/09/34/wKhkGWb6A9aAQ9XuAAEWWrMkv5I9344.jpg)
![第2章-網(wǎng)頁前端基礎(chǔ)_第5頁](http://file4.renrendoc.com/view12/M02/09/34/wKhkGWb6A9aAQ9XuAAEWWrMkv5I9345.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
網(wǎng)頁前端基礎(chǔ)2024/9/301認(rèn)識HTTP協(xié)議目錄認(rèn)識Python網(wǎng)絡(luò)編程2小結(jié)3網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個socket。套接字是socket的通常叫法,用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現(xiàn)不同虛擬機或不同計算機之間的通信。Python中Socket庫為操作系統(tǒng)的socket實現(xiàn)提供了一個Python接口。Python網(wǎng)絡(luò)編程Socket庫套接字(socket)socket庫中整合了多種協(xié)議類型。Python網(wǎng)絡(luò)編程Socket庫1.socket協(xié)議類型socket協(xié)議類型描述socket.AF_UNIX用于同一臺機器上的進(jìn)程通信(本地通信)socket.AF_INET用于服務(wù)器與服務(wù)器之間的網(wǎng)絡(luò)通信socket.AF_INET6基于IPV6方式的服務(wù)器與服務(wù)器之間的網(wǎng)絡(luò)通信socket.SOCK_STREAM基于TCP的流式socket通信socket.SOCK_DGRAM基于UDP的數(shù)據(jù)報式socket通信socket.SOCK_RAW原始套接字,普通的套接字無法處理ICMP、IGMP等網(wǎng)絡(luò)報文,而SOCK_RAW可以;其次SOCK_RAW也可以處理特殊的IPV4報文;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項由用戶構(gòu)造IP頭socket.SOCK_SEQPACKET可靠的連續(xù)數(shù)據(jù)包服務(wù)服務(wù)器端Socket函數(shù):socket庫中的服務(wù)器端函數(shù)僅供服務(wù)器使用。Python網(wǎng)絡(luò)編程Socket庫2.socket函數(shù)語法格式描述socket.bind(address)將套接字綁定到地址,在AF_INET協(xié)議下,以tuple(host,port)的方式傳入,如socket.bind((host,port)),其中host為綁定的地址,port為監(jiān)聽的端口socket.listen(backlog)開始監(jiān)聽TCP傳入連接,backlog指定在拒絕鏈接前,操作系統(tǒng)可以掛起的最大連接數(shù),該值最少為1,大部分應(yīng)用程序通常設(shè)為5socket.accept()接受TCP鏈接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發(fā)送數(shù)據(jù),address是鏈接客戶端的地址客戶端Socket函數(shù):socket庫中的客戶端函數(shù)僅供客戶端使用。Python網(wǎng)絡(luò)編程Socket庫2.socket函數(shù)語法格式描述socket.connect(address)連接到address處的套接字,一般address的格式為tuple(host,port),若連接出錯,則返回socket.error錯誤socket.connect_ex(address)功能與socket.connect相同,但成功返回0,失敗返回error的值公共Socket函數(shù):socket庫中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫2.socket函數(shù)語法格式描述socket.recv(buffsize[,flag])接受TCP套接字的數(shù)據(jù),數(shù)據(jù)以字符串形式返回,buffsize指定要接受的最大數(shù)據(jù)量,flag提供有關(guān)消息的其他信息,通??梢院雎詓ocket.send(string[,flag])發(fā)送TCP數(shù)據(jù),將字符串中的數(shù)據(jù)發(fā)送到鏈接的套接字,返回值是要發(fā)送的字節(jié)數(shù)量,該數(shù)量可能小于string的字節(jié)大小socket.sendall(string[,flag])完整發(fā)送TCP數(shù)據(jù),將字符串中的數(shù)據(jù)發(fā)送到鏈接的套接字,但在返回之前嘗試發(fā)送所有數(shù)據(jù)。成功返回None,失敗則拋出異常socket.recvfrom(bufsize[,flag])接受UDP套接字的數(shù)據(jù),與recv函數(shù)類似,但返回值是tuple(data,address)。其中data是包含接受數(shù)據(jù)的字符串,address是發(fā)送數(shù)據(jù)的套接字地址socket.sendto(string[,flag],address)發(fā)送UDP數(shù)據(jù),將數(shù)據(jù)發(fā)送到套接字,address形式為tuple(ipaddr,port),指定遠(yuǎn)程地址發(fā)送,返回值是發(fā)送的字節(jié)數(shù)socket.close()關(guān)閉套接字公共Socket函數(shù):socket庫中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫2.socket函數(shù)語法格式描述socket.getpeername()返回套接字的遠(yuǎn)程地址,返回值通常是一個tuple(ipaddr,port)socket.getsockname()返回套接字自己的地址,返回值通常是一個tuple(ipaddr,port)socket.setsockopt(level,optname,value)設(shè)置給定套接字選項的值socket.getsockopt(level,optname[,buflen])返回套接字選項的值公共Socket函數(shù):socket庫中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫2.socket函數(shù)語法格式描述socket.settimeout(timeout)設(shè)置套接字操作的超時時間,timeout是一個浮點數(shù),單位是秒,值為None時表示永遠(yuǎn)不會超時。超時時間應(yīng)在剛創(chuàng)建套接字時設(shè)置,因為它們可能用于連接的操作,如s.connect()socket.gettimeout()返回當(dāng)前超時值,單位是秒,如果沒有設(shè)置超時則返回Nonesocket.fileno()返回套接字的文件描述socket.makefile()創(chuàng)建一個與該套接字相關(guān)的文件TCP連接由客戶端發(fā)起,服務(wù)器對連接進(jìn)行響應(yīng)。建立一個服務(wù)器,服務(wù)器進(jìn)程需要綁定一個端口并監(jiān)聽來自其他客戶端的連接。若有客戶端發(fā)起連接請求,服務(wù)器就與該客戶端建立Socket連接,隨后的通信就通過此Socket連接進(jìn)行。服務(wù)器依賴服務(wù)器地址,服務(wù)器端口,客戶端地址,客戶端端口這4項來唯一確定一個Socket連接。使用Socket進(jìn)行TCP編程建立服務(wù)器端的TCP連接,具體步驟如下。在Python中創(chuàng)建一個基于IPv4和TCP協(xié)議的Socket。綁定監(jiān)聽的地址和端口,地址使用本機地址“”或“l(fā)ocalhost”,使用大于1024的端口。調(diào)用listen方法開始監(jiān)聽端口,傳入的參數(shù)指定等待連接的最大數(shù)量,設(shè)定為5。創(chuàng)建一個tcp函數(shù),該函數(shù)在連接建立后,服務(wù)器端首先發(fā)出一條表示連接成功的消息,然后等待客戶端數(shù)據(jù),再加上歡迎信息發(fā)送給客戶端。若客戶端發(fā)送exit字符串,則直接關(guān)閉連接。通過一個循環(huán)接受來自客戶端的連接,使用accept函數(shù)等待并返回一個客戶端的連接,每個連接都分配一個新線程來處理。使用Socket進(jìn)行TCP編程1.服務(wù)器端TCP連接在服務(wù)器端TCP連接建立后,建立客戶端TCP連接進(jìn)行測試,具體步驟如下。與服務(wù)器端的協(xié)議保持一致,也建立一個基于IPv4和TCP協(xié)議的Socket。與服務(wù)器端建立連接,連接的地址與端口需與服務(wù)器端保持一致。使用recv函數(shù)接受服務(wù)器提示信息,之后再使用send函數(shù)發(fā)送數(shù)據(jù)至服務(wù)器,可看到服務(wù)器返回的結(jié)果。使用Socket進(jìn)行TCP編程2.客戶端TCP連接TCP建立的連接可靠,通信雙方以流的形式互相傳送數(shù)據(jù)。相對TCP協(xié)議,UDP則是面向無連接的協(xié)議。使用UDP協(xié)議時,無需建立連接的過程,僅需知道對方的IP地址及端口號,便可直接發(fā)送數(shù)據(jù)包,但無法保證能順利傳達(dá)到。雖然用UDP傳輸數(shù)據(jù)不可靠,但其傳輸速度比TCP快,對于不要求可靠到達(dá)的數(shù)據(jù),就可以使用UDP協(xié)議。UDP傳輸通常應(yīng)用在通訊實時性要求更高于可靠性場景,例如網(wǎng)絡(luò)游戲。使用Socket進(jìn)行UDP編程UDP連接與TCP連接類似,也分為服務(wù)器端和客戶端,不同的是UDP連接無需調(diào)用listen方法,直接接受來自任何客戶端的數(shù)據(jù)。建立UDP連接,服務(wù)器端同樣需要綁定地址與端口。使用recvfrom方法返回數(shù)據(jù)及客戶端的地址與端口。當(dāng)服務(wù)器收到數(shù)據(jù)后,直接調(diào)用sendto把數(shù)據(jù)用UDP發(fā)給客戶端。使用Socket進(jìn)行UDP編程1.服務(wù)器端UDP連接客戶端使用UDP連接時同樣需要先創(chuàng)建socket。之后無需使用connect方法,直接用sendto方法發(fā)送數(shù)據(jù)至服務(wù)器建立UDP連接,服務(wù)器端同樣需要綁定地址與端口。UDP連接與TCP連接可同時使用同一端口互不沖突,兩者使用的端口是獨立綁定的。使用Socket進(jìn)行UDP編程2.客戶端UDP連接1認(rèn)識HTTP協(xié)議目錄認(rèn)識Python網(wǎng)絡(luò)編程2小結(jié)3爬蟲在爬取數(shù)據(jù)時將會作為客戶端模擬整個HTTP通信過程,該過程也需要通過HTTP協(xié)議實現(xiàn)。HTTP請求過程如下。由HTTP客戶端向服務(wù)器發(fā)起一個請求,創(chuàng)建一個到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接。HTTP服務(wù)器從該端口監(jiān)聽客戶端的請求。一旦收到請求,服務(wù)器會向客戶端返回一個狀態(tài),比如“HTTP/1.1200OK”,以及返回的響應(yīng)內(nèi)容,如請求的文件、錯誤消息、或其它信息。HTTP請求方式與過程在HTTP/1.1協(xié)議中共定義了8種方法(也叫“動作”)來以不同方式操作指定的資源,常用方法有GET、HEAD、POST等。HTTP請求方式與過程1.請求方法請求方法方法描述GET請求指定的頁面信息,并返回實體主體。GET可能會被網(wǎng)絡(luò)爬蟲等隨意訪問,因此GET方法應(yīng)該只用在讀取數(shù)據(jù),而不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在WebApplication中HEAD與GET方法一樣,都是向服務(wù)器發(fā)出指定資源的請求。只不過服務(wù)器將不傳回具體的內(nèi)容,使用這個方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲取其中該資源的相關(guān)信息(元信息或稱元數(shù)據(jù))POST向指定資源提交數(shù)據(jù),請求服務(wù)器進(jìn)行處理(例如提交表單或者上傳文件)。數(shù)據(jù)會被包含在請求中,這個請求可能會創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有PUT從客戶端上傳指定資源的最新內(nèi)容,即更新服務(wù)器端的指定資源。HTTP協(xié)議采用了請求/響應(yīng)模型??蛻舳讼蚍?wù)器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務(wù)器以一個狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、響應(yīng)狀態(tài)、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。HTTP請求方式與過程2.請求(request)與響應(yīng)(response)客戶端與服務(wù)器間的請求與響應(yīng)的具體步驟如下。連接Web服務(wù)器:由一個HTTP客戶端發(fā)起連接,與Web服務(wù)器的HTTP端口(默認(rèn)為80)建立一個TCP套接字連接。發(fā)送HTTP請求:客戶端經(jīng)TCP套接字向Web服務(wù)器發(fā)送一個文本的請求報文。服務(wù)器接受請求并返回HTTP響應(yīng):Web服務(wù)器解析請求,定位該次的請求資源。之后將資源復(fù)本寫至TCP套接字,由客戶端進(jìn)行讀取。釋放連接TCP連接:若連接的connection模式為close,則由服務(wù)器主動關(guān)閉TCP連接,客戶端將被動關(guān)閉連接,釋放TCP連接;若connection模式為keepalive,則該連接會保持一段時間??蛻舳私馕鯤TML內(nèi)容:客戶端首先會對狀態(tài)行進(jìn)行解析,之后解析每一個響應(yīng)頭,最后讀取響應(yīng)數(shù)據(jù)。HTTP請求方式與過程2.請求(request)與響應(yīng)(response)HTTP狀態(tài)碼是用來表示網(wǎng)頁服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼,按首位數(shù)字分為5類狀態(tài)碼。常見HTTP狀態(tài)碼1.HTTP狀態(tài)碼種類狀態(tài)碼類型狀態(tài)碼意義1XX表示請求已被接受,需接后續(xù)處理。這類響應(yīng)是臨時響應(yīng),只包含狀態(tài)行和某些可選的響應(yīng)頭信息,并以空行結(jié)束2XX表示請求已成功被服務(wù)器接收、理解并接受3XX表示需要客戶端采取進(jìn)一步的操作才能完成請求。通常用來重定向,重定向目標(biāo)需在本次響應(yīng)中指明4XX表示客戶端可能發(fā)生了錯誤,妨礙了服務(wù)器的處理。5XX表示服務(wù)器在處理請求的過程中有錯誤或者異常狀態(tài)發(fā)生,也有可能是服務(wù)器以當(dāng)前的軟硬件資源無法完成對請求的處理。HTTP狀態(tài)碼共有67種狀態(tài)碼,常見的狀態(tài)碼如下。常見HTTP狀態(tài)碼2.常見HTTP狀態(tài)碼常見狀態(tài)碼狀態(tài)碼含義200OK請求成功,請求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回。400BadRequest由于客戶端的語法錯誤、無效的請求或欺騙性路由請求,服務(wù)器不會處理該請求403Forbidden服務(wù)器已經(jīng)理解該請求,但是拒絕執(zhí)行,將在返回的實體內(nèi)描述拒絕的原因,也可以不描述僅返回404響應(yīng)404NotFound請求失敗,請求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn),但允許用戶的后續(xù)請求500InternalServerError通用錯誤消息,服務(wù)器遇到了一個未曾預(yù)料的狀況,導(dǎo)致了它無法完成對請求的處理,不會給出具體錯誤信息503ServiceUnavailable由于臨時的服務(wù)器維護或者過載,服務(wù)器當(dāng)前無法處理請求。這個狀況是暫時的,并且將在一段時間以后恢復(fù)HTTP頭部信息(HTTPheaderfields)是指在超文本傳輸協(xié)議(HTTP)的請求和響應(yīng)消息中的消息頭部分。頭部信息定義了一個超文本傳輸協(xié)議事務(wù)中的操作參數(shù)。在爬蟲中需要使用頭部信息向服務(wù)器發(fā)送模擬信息,通過發(fā)送模擬的頭部信息將自己偽裝成一般的客戶端。HTTP頭部信息HTTP頭部類型按用途可分為:通用頭,請求頭,響應(yīng)頭,實體頭。通用頭:既適用于客戶端的請求頭,也適用于服務(wù)端的響應(yīng)頭。與HTTP消息體內(nèi)最終傳輸?shù)臄?shù)據(jù)是無關(guān)的,只適用于要發(fā)送的消息。請求頭:提供更為精確的描述信息,其對象為所請求的資源或請求本身。新版HTTP增加的請求頭不能在更低版本的HTTP中使用,但服務(wù)器和客戶端若都能對相關(guān)頭進(jìn)行處理,則可以在請求中使用。響應(yīng)頭:為響應(yīng)消息提供了更多信息。例如,關(guān)于資源位置的描述Location字段,以及關(guān)于服務(wù)器本身的描述使用Server字段等。與請求頭類似,新版增加的響應(yīng)頭也不能在更低版本的HTTP版本中使用。實體頭:提供了關(guān)于消息體的描述。如消息體的長度Content-Length,消息體的MIME類型Content-Type。新版的實體頭可以在更低版本的HTTP版本中使用。HTTP頭部信息1.HTTP頭部類型HTTP頭字段根據(jù)實際用途被分為4種類型:通用頭字段(GeneralHeaderFields),請求頭字段(RequestHeaderFields),響應(yīng)頭字段(ResponseHeaderFields),實體頭字段(EntityHeaderFields)。HTTP頭部信息2.常用頭字段字段名說明示例Accept可接受的響應(yīng)內(nèi)容類型(Content-Types)Accept:text/plainAccept-Charset可接受的字符集Accept-Charset:utf-8Accept-Encoding可接受的響應(yīng)內(nèi)容的編碼方式Accept-Encoding:gzip,deflateAccept-Language可接受的響應(yīng)內(nèi)容語言列表Accept-Language:en-USCookie由之前服務(wù)器通過Set-Cookie設(shè)置的一個HTTP協(xié)議CookieCookie:$Version=1;Skin=new;Referer設(shè)置前一個頁面的地址,并且前一個頁面中的連接指向當(dāng)前請求,意思就是如果當(dāng)前請求是在A頁面中發(fā)送的,那么referer就是A頁面的url地址Referer:/wiki/Main_PageUser-Agent用戶代理的字符串值User-Agent:Mozilla/5.0(X11;Linuxx86_64;rv:12.0)Gecko/20100101Firefox/21.0HTTP是一種無狀態(tài)的協(xié)議,客戶端與服務(wù)器建立連接并傳輸數(shù)據(jù),在數(shù)據(jù)傳輸完成后,本次的連接將會關(guān)閉,并不會留存相關(guān)記錄。服務(wù)器無法依據(jù)連接來跟蹤會話,也無法從連接上知曉用戶的歷史操作。這嚴(yán)重阻礙了基于Web應(yīng)用程序的交互,也影響用戶的交互體驗。某些網(wǎng)站需要用戶登錄才進(jìn)一步操作,用戶在輸入賬號密碼登錄后,才能瀏覽頁面。對于服務(wù)器而言,由于HTTP的無狀態(tài)性,服務(wù)器并不知道用戶有沒有登錄過,當(dāng)用戶退出當(dāng)前頁面訪問其他頁面時,又需重新再次輸入賬號及密碼。熟悉Cookie為解決HTTP的無狀態(tài)性帶來的負(fù)面作用,Cookie機制應(yīng)運而生。Cookie本質(zhì)上是一段文本信息。當(dāng)客戶端請求服務(wù)器時,若服務(wù)器需要記錄用戶狀態(tài),就在響應(yīng)用戶請求時發(fā)送一段Cookie信息??蛻舳藶g覽器會保存該Cookie信息,當(dāng)用戶再次訪問該網(wǎng)站時,瀏覽器會把Cookie做為請求信息的一部分提交給服務(wù)器。服務(wù)器對Cookie進(jìn)行驗證,以此來判斷用戶狀態(tài),當(dāng)且僅當(dāng)該Cookie合法且未過期時,用戶才可直接登錄網(wǎng)站。熟悉Cookie1.Cookie機制Cookie由用戶客戶
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 繪畫心理治療課程-認(rèn)識你自己課件
- 2021全球多行業(yè)重大網(wǎng)絡(luò)安全事件大盤點
- 安全員年度再教育3
- 2025-2030全球自動緊湊型視野計行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球商用蘑菇殺菌設(shè)備行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國粘度過程分析儀行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國磨削數(shù)控系統(tǒng)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球水力冷凝鍋爐行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國電動甲板機械行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 照明亮化工程施工合同
- 《梅大高速茶陽路段“5·1”塌方災(zāi)害調(diào)查評估報告》專題警示學(xué)習(xí)
- 2024年09月北京中信銀行北京分行社會招考(917)筆試歷年參考題庫附帶答案詳解
- 《大健康解讀》課件
- 2025年度交通運輸規(guī)劃外聘專家咨詢協(xié)議3篇
- 2024年公司領(lǐng)導(dǎo)在新年動員會上的講話樣本(3篇)
- 2025年中國濕度傳感器行業(yè)深度分析、投資前景、趨勢預(yù)測報告(智研咨詢)
- 人教版道德與法治二年級下冊《第一單元 讓我試試看》大單元整體教學(xué)設(shè)計2022課標(biāo)
- 聯(lián)合體三方協(xié)議合同模板
- 2024年3季度青島房地產(chǎn)市場季度簡報
- 蘇東坡詞十首
- 2023年天津市文化和旅游局直屬事業(yè)單位招聘考試真題及答案
評論
0/150
提交評論