版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
網(wǎng)頁(yè)前端基礎(chǔ)2023/1/2網(wǎng)頁(yè)前端基礎(chǔ)2022/12/181認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)31認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)3網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket。套接字是socket的通常叫法,用于描述IP地址和端口,是一個(gè)通信鏈的句柄,可以用來(lái)實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信。Python中Socket庫(kù)為操作系統(tǒng)的socket實(shí)現(xiàn)提供了一個(gè)Python接口。Python網(wǎng)絡(luò)編程Socket庫(kù)套接字(socket)網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連socket庫(kù)中整合了多種協(xié)議類型。Python網(wǎng)絡(luò)編程Socket庫(kù)1.socket協(xié)議類型socket協(xié)議類型描述socket.AF_UNIX用于同一臺(tái)機(jī)器上的進(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ù)報(bào)式socket通信socket.SOCK_RAW原始套接字,普通的套接字無(wú)法處理ICMP、IGMP等網(wǎng)絡(luò)報(bào)文,而SOCK_RAW可以;其次SOCK_RAW也可以處理特殊的IPV4報(bào)文;此外,利用原始套接字,可以通過(guò)IP_HDRINCL套接字選項(xiàng)由用戶構(gòu)造IP頭socket.SOCK_SEQPACKET可靠的連續(xù)數(shù)據(jù)包服務(wù)socket庫(kù)中整合了多種協(xié)議類型。Python網(wǎng)絡(luò)編程So服務(wù)器端Socket函數(shù):socket庫(kù)中的服務(wù)器端函數(shù)僅供服務(wù)器使用。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述socket.bind(address)將套接字綁定到地址,在AF_INET協(xié)議下,以tuple(host,port)的方式傳入,如socket.bind((host,port)),其中host為綁定的地址,port為監(jiān)聽(tīng)的端口socket.listen(backlog)開(kāi)始監(jiān)聽(tīng)TCP傳入連接,backlog指定在拒絕鏈接前,操作系統(tǒng)可以掛起的最大連接數(shù),該值最少為1,大部分應(yīng)用程序通常設(shè)為5socket.accept()接受TCP鏈接并返回(conn,address),其中conn是新的套接字對(duì)象,可以用來(lái)接收和發(fā)送數(shù)據(jù),address是鏈接客戶端的地址服務(wù)器端Socket函數(shù):socket庫(kù)中的服務(wù)器端函數(shù)僅供客戶端Socket函數(shù):socket庫(kù)中的客戶端函數(shù)僅供客戶端使用。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述socket.connect(address)連接到address處的套接字,一般address的格式為tuple(host,port),若連接出錯(cuò),則返回socket.error錯(cuò)誤socket.connect_ex(address)功能與socket.connect相同,但成功返回0,失敗返回error的值客戶端Socket函數(shù):socket庫(kù)中的客戶端函數(shù)僅供客戶公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述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庫(kù)中的公共函數(shù)即可在服務(wù)器公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述socket.getpeername()返回套接字的遠(yuǎn)程地址,返回值通常是一個(gè)tuple(ipaddr,port)socket.getsockname()返回套接字自己的地址,返回值通常是一個(gè)tuple(ipaddr,port)socket.setsockopt(level,optname,value)設(shè)置給定套接字選項(xiàng)的值socket.getsockopt(level,optname[,buflen])返回套接字選項(xiàng)的值公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述socket.settimeout(timeout)設(shè)置套接字操作的超時(shí)時(shí)間,timeout是一個(gè)浮點(diǎn)數(shù),單位是秒,值為None時(shí)表示永遠(yuǎn)不會(huì)超時(shí)。超時(shí)時(shí)間應(yīng)在剛創(chuàng)建套接字時(shí)設(shè)置,因?yàn)樗鼈兛赡苡糜谶B接的操作,如s.connect()socket.gettimeout()返回當(dāng)前超時(shí)值,單位是秒,如果沒(méi)有設(shè)置超時(shí)則返回Nonesocket.fileno()返回套接字的文件描述socket.makefile()創(chuàng)建一個(gè)與該套接字相關(guān)的文件公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器TCP連接由客戶端發(fā)起,服務(wù)器對(duì)連接進(jìn)行響應(yīng)。建立一個(gè)服務(wù)器,服務(wù)器進(jìn)程需要綁定一個(gè)端口并監(jiān)聽(tīng)來(lái)自其他客戶端的連接。若有客戶端發(fā)起連接請(qǐng)求,服務(wù)器就與該客戶端建立Socket連接,隨后的通信就通過(guò)此Socket連接進(jìn)行。服務(wù)器依賴服務(wù)器地址,服務(wù)器端口,客戶端地址,客戶端端口這4項(xiàng)來(lái)唯一確定一個(gè)Socket連接。使用Socket進(jìn)行TCP編程TCP連接由客戶端發(fā)起,服務(wù)器對(duì)連接進(jìn)行響應(yīng)。使用Socke建立服務(wù)器端的TCP連接,具體步驟如下。在Python中創(chuàng)建一個(gè)基于IPv4和TCP協(xié)議的Socket。綁定監(jiān)聽(tīng)的地址和端口,地址使用本機(jī)地址“”或“l(fā)ocalhost”,使用大于1024的端口。調(diào)用listen方法開(kāi)始監(jiān)聽(tīng)端口,傳入的參數(shù)指定等待連接的最大數(shù)量,設(shè)定為5。創(chuàng)建一個(gè)tcp函數(shù),該函數(shù)在連接建立后,服務(wù)器端首先發(fā)出一條表示連接成功的消息,然后等待客戶端數(shù)據(jù),再加上歡迎信息發(fā)送給客戶端。若客戶端發(fā)送exit字符串,則直接關(guān)閉連接。通過(guò)一個(gè)循環(huán)接受來(lái)自客戶端的連接,使用accept函數(shù)等待并返回一個(gè)客戶端的連接,每個(gè)連接都分配一個(gè)新線程來(lái)處理。使用Socket進(jìn)行TCP編程1.服務(wù)器端TCP連接建立服務(wù)器端的TCP連接,具體步驟如下。使用Socket進(jìn)行在服務(wù)器端TCP連接建立后,建立客戶端TCP連接進(jìn)行測(cè)試,具體步驟如下。與服務(wù)器端的協(xié)議保持一致,也建立一個(gè)基于IPv4和TCP協(xié)議的Socket。與服務(wù)器端建立連接,連接的地址與端口需與服務(wù)器端保持一致。使用recv函數(shù)接受服務(wù)器提示信息,之后再使用send函數(shù)發(fā)送數(shù)據(jù)至服務(wù)器,可看到服務(wù)器返回的結(jié)果。使用Socket進(jìn)行TCP編程2.客戶端TCP連接在服務(wù)器端TCP連接建立后,建立客戶端TCP連接進(jìn)行測(cè)試,具TCP建立的連接可靠,通信雙方以流的形式互相傳送數(shù)據(jù)。相對(duì)TCP協(xié)議,UDP則是面向無(wú)連接的協(xié)議。使用UDP協(xié)議時(shí),無(wú)需建立連接的過(guò)程,僅需知道對(duì)方的IP地址及端口號(hào),便可直接發(fā)送數(shù)據(jù)包,但無(wú)法保證能順利傳達(dá)到。雖然用UDP傳輸數(shù)據(jù)不可靠,但其傳輸速度比TCP快,對(duì)于不要求可靠到達(dá)的數(shù)據(jù),就可以使用UDP協(xié)議。UDP傳輸通常應(yīng)用在通訊實(shí)時(shí)性要求更高于可靠性場(chǎng)景,例如網(wǎng)絡(luò)游戲。使用Socket進(jìn)行UDP編程TCP建立的連接可靠,通信雙方以流的形式互相傳送數(shù)據(jù)。相對(duì)TUDP連接與TCP連接類似,也分為服務(wù)器端和客戶端,不同的是UDP連接無(wú)需調(diào)用listen方法,直接接受來(lái)自任何客戶端的數(shù)據(jù)。建立UDP連接,服務(wù)器端同樣需要綁定地址與端口。使用recvfrom方法返回?cái)?shù)據(jù)及客戶端的地址與端口。當(dāng)服務(wù)器收到數(shù)據(jù)后,直接調(diào)用sendto把數(shù)據(jù)用UDP發(fā)給客戶端。使用Socket進(jìn)行UDP編程1.服務(wù)器端UDP連接UDP連接與TCP連接類似,也分為服務(wù)器端和客戶端,不同的是客戶端使用UDP連接時(shí)同樣需要先創(chuàng)建socket。之后無(wú)需使用connect方法,直接用sendto方法發(fā)送數(shù)據(jù)至服務(wù)器建立UDP連接,服務(wù)器端同樣需要綁定地址與端口。UDP連接與TCP連接可同時(shí)使用同一端口互不沖突,兩者使用的端口是獨(dú)立綁定的。使用Socket進(jìn)行UDP編程2.客戶端UDP連接客戶端使用UDP連接時(shí)同樣需要先創(chuàng)建socket。使用Soc1認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)31認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)3爬蟲(chóng)在爬取數(shù)據(jù)時(shí)將會(huì)作為客戶端模擬整個(gè)HTTP通信過(guò)程,該過(guò)程也需要通過(guò)HTTP協(xié)議實(shí)現(xiàn)。HTTP請(qǐng)求過(guò)程如下。由HTTP客戶端向服務(wù)器發(fā)起一個(gè)請(qǐng)求,創(chuàng)建一個(gè)到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接。HTTP服務(wù)器從該端口監(jiān)聽(tīng)客戶端的請(qǐng)求。一旦收到請(qǐng)求,服務(wù)器會(huì)向客戶端返回一個(gè)狀態(tài),比如“HTTP/1.1200OK”,以及返回的響應(yīng)內(nèi)容,如請(qǐng)求的文件、錯(cuò)誤消息、或其它信息。HTTP請(qǐng)求方式與過(guò)程爬蟲(chóng)在爬取數(shù)據(jù)時(shí)將會(huì)作為客戶端模擬整個(gè)HTTP通信過(guò)程,該過(guò)在HTTP/1.1協(xié)議中共定義了8種方法(也叫“動(dòng)作”)來(lái)以不同方式操作指定的資源,常用方法有GET、HEAD、POST等。HTTP請(qǐng)求方式與過(guò)程1.請(qǐng)求方法請(qǐng)求方法方法描述GET請(qǐng)求指定的頁(yè)面信息,并返回實(shí)體主體。GET可能會(huì)被網(wǎng)絡(luò)爬蟲(chóng)等隨意訪問(wèn),因此GET方法應(yīng)該只用在讀取數(shù)據(jù),而不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在WebApplication中HEAD與GET方法一樣,都是向服務(wù)器發(fā)出指定資源的請(qǐng)求。只不過(guò)服務(wù)器將不傳回具體的內(nèi)容,使用這個(gè)方法可以在不必傳輸全部?jī)?nèi)容的情況下,就可以獲取其中該資源的相關(guān)信息(元信息或稱元數(shù)據(jù))POST向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理(例如提交表單或者上傳文件)。數(shù)據(jù)會(huì)被包含在請(qǐng)求中,這個(gè)請(qǐng)求可能會(huì)創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有PUT從客戶端上傳指定資源的最新內(nèi)容,即更新服務(wù)器端的指定資源。在HTTP/1.1協(xié)議中共定義了8種方法(也叫“動(dòng)作”)來(lái)以HTTP協(xié)議采用了請(qǐng)求/響應(yīng)模型??蛻舳讼蚍?wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文,請(qǐng)求報(bào)文包含請(qǐng)求的方法、URL、協(xié)議版本、請(qǐng)求頭部和請(qǐng)求數(shù)據(jù)。服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、響應(yīng)狀態(tài)、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。HTTP請(qǐng)求方式與過(guò)程2.請(qǐng)求(request)與響應(yīng)(response)HTTP協(xié)議采用了請(qǐng)求/響應(yīng)模型。HTTP請(qǐng)求方式與過(guò)程2.客戶端與服務(wù)器間的請(qǐng)求與響應(yīng)的具體步驟如下。連接Web服務(wù)器:由一個(gè)HTTP客戶端發(fā)起連接,與Web服務(wù)器的HTTP端口(默認(rèn)為80)建立一個(gè)TCP套接字連接。發(fā)送HTTP請(qǐng)求:客戶端經(jīng)TCP套接字向Web服務(wù)器發(fā)送一個(gè)文本的請(qǐng)求報(bào)文。服務(wù)器接受請(qǐng)求并返回HTTP響應(yīng):Web服務(wù)器解析請(qǐng)求,定位該次的請(qǐng)求資源。之后將資源復(fù)本寫至TCP套接字,由客戶端進(jìn)行讀取。釋放連接TCP連接:若連接的connection模式為close,則由服務(wù)器主動(dòng)關(guān)閉TCP連接,客戶端將被動(dòng)關(guān)閉連接,釋放TCP連接;若connection模式為keepalive,則該連接會(huì)保持一段時(shí)間??蛻舳私馕鯤TML內(nèi)容:客戶端首先會(huì)對(duì)狀態(tài)行進(jìn)行解析,之后解析每一個(gè)響應(yīng)頭,最后讀取響應(yīng)數(shù)據(jù)。HTTP請(qǐng)求方式與過(guò)程2.請(qǐng)求(request)與響應(yīng)(response)客戶端與服務(wù)器間的請(qǐng)求與響應(yīng)的具體步驟如下。HTTP請(qǐng)求方式HTTP狀態(tài)碼是用來(lái)表示網(wǎng)頁(yè)服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼,按首位數(shù)字分為5類狀態(tài)碼。常見(jiàn)HTTP狀態(tài)碼1.HTTP狀態(tài)碼種類狀態(tài)碼類型狀態(tài)碼意義1XX表示請(qǐng)求已被接受,需接后續(xù)處理。這類響應(yīng)是臨時(shí)響應(yīng),只包含狀態(tài)行和某些可選的響應(yīng)頭信息,并以空行結(jié)束2XX表示請(qǐng)求已成功被服務(wù)器接收、理解并接受3XX表示需要客戶端采取進(jìn)一步的操作才能完成請(qǐng)求。通常用來(lái)重定向,重定向目標(biāo)需在本次響應(yīng)中指明4XX表示客戶端可能發(fā)生了錯(cuò)誤,妨礙了服務(wù)器的處理。5XX表示服務(wù)器在處理請(qǐng)求的過(guò)程中有錯(cuò)誤或者異常狀態(tài)發(fā)生,也有可能是服務(wù)器以當(dāng)前的軟硬件資源無(wú)法完成對(duì)請(qǐng)求的處理。HTTP狀態(tài)碼是用來(lái)表示網(wǎng)頁(yè)服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼,按HTTP狀態(tài)碼共有67種狀態(tài)碼,常見(jiàn)的狀態(tài)碼如下。常見(jiàn)HTTP狀態(tài)碼2.常見(jiàn)HTTP狀態(tài)碼常見(jiàn)狀態(tài)碼狀態(tài)碼含義200OK請(qǐng)求成功,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回。400BadRequest由于客戶端的語(yǔ)法錯(cuò)誤、無(wú)效的請(qǐng)求或欺騙性路由請(qǐng)求,服務(wù)器不會(huì)處理該請(qǐng)求403Forbidden服務(wù)器已經(jīng)理解該請(qǐng)求,但是拒絕執(zhí)行,將在返回的實(shí)體內(nèi)描述拒絕的原因,也可以不描述僅返回404響應(yīng)404NotFound請(qǐng)求失敗,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn),但允許用戶的后續(xù)請(qǐng)求500InternalServerError通用錯(cuò)誤消息,服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況,導(dǎo)致了它無(wú)法完成對(duì)請(qǐng)求的處理,不會(huì)給出具體錯(cuò)誤信息503ServiceUnavailable由于臨時(shí)的服務(wù)器維護(hù)或者過(guò)載,服務(wù)器當(dāng)前無(wú)法處理請(qǐng)求。這個(gè)狀況是暫時(shí)的,并且將在一段時(shí)間以后恢復(fù)HTTP狀態(tài)碼共有67種狀態(tài)碼,常見(jiàn)的狀態(tài)碼如下。常見(jiàn)HTTHTTP頭部信息(HTTPheaderfields)是指在超文本傳輸協(xié)議(HTTP)的請(qǐng)求和響應(yīng)消息中的消息頭部分。頭部信息定義了一個(gè)超文本傳輸協(xié)議事務(wù)中的操作參數(shù)。在爬蟲(chóng)中需要使用頭部信息向服務(wù)器發(fā)送模擬信息,通過(guò)發(fā)送模擬的頭部信息將自己偽裝成一般的客戶端。HTTP頭部信息HTTP頭部信息(HTTPheaderfields)是指HTTP頭部類型按用途可分為:通用頭,請(qǐng)求頭,響應(yīng)頭,實(shí)體頭。通用頭:既適用于客戶端的請(qǐng)求頭,也適用于服務(wù)端的響應(yīng)頭。與HTTP消息體內(nèi)最終傳輸?shù)臄?shù)據(jù)是無(wú)關(guān)的,只適用于要發(fā)送的消息。請(qǐng)求頭:提供更為精確的描述信息,其對(duì)象為所請(qǐng)求的資源或請(qǐng)求本身。新版HTTP增加的請(qǐng)求頭不能在更低版本的HTTP中使用,但服務(wù)器和客戶端若都能對(duì)相關(guān)頭進(jìn)行處理,則可以在請(qǐng)求中使用。響應(yīng)頭:為響應(yīng)消息提供了更多信息。例如,關(guān)于資源位置的描述Location字段,以及關(guān)于服務(wù)器本身的描述使用Server字段等。與請(qǐng)求頭類似,新版增加的響應(yīng)頭也不能在更低版本的HTTP版本中使用。實(shí)體頭:提供了關(guān)于消息體的描述。如消息體的長(zhǎng)度Content-Length,消息體的MIME類型Content-Type。新版的實(shí)體頭可以在更低版本的HTTP版本中使用。HTTP頭部信息1.HTTP頭部類型HTTP頭部類型按用途可分為:通用頭,請(qǐng)求頭,響應(yīng)頭,實(shí)體頭HTTP頭字段根據(jù)實(shí)際用途被分為4種類型:通用頭字段(GeneralHeaderFields),請(qǐng)求頭字段(RequestHeaderFields),響應(yīng)頭字段(ResponseHeaderFields),實(shí)體頭字段(EntityHeaderFields)。HTTP頭部信息2.常用頭字段字段名說(shuō)明示例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)容語(yǔ)言列表Accept-Language:en-USCookie由之前服務(wù)器通過(guò)Set-Cookie設(shè)置的一個(gè)HTTP協(xié)議CookieCookie:$Version=1;Skin=new;Referer設(shè)置前一個(gè)頁(yè)面的地址,并且前一個(gè)頁(yè)面中的連接指向當(dāng)前請(qǐng)求,意思就是如果當(dāng)前請(qǐng)求是在A頁(yè)面中發(fā)送的,那么referer就是A頁(yè)面的url地址Referer:/wiki/Main_PageUser-Agent用戶代理的字符串值User-Agent:Mozilla/5.0(X11;Linuxx86_64;rv:12.0)Gecko/20100101Firefox/21.0HTTP頭字段根據(jù)實(shí)際用途被分為4種類型:通用頭字段(GenHTTP是一種無(wú)狀態(tài)的協(xié)議,客戶端與服務(wù)器建立連接并傳輸數(shù)據(jù),在數(shù)據(jù)傳輸完成后,本次的連接將會(huì)關(guān)閉,并不會(huì)留存相關(guān)記錄。服務(wù)器無(wú)法依據(jù)連接來(lái)跟蹤會(huì)話,也無(wú)法從連接上知曉用戶的歷史操作。這嚴(yán)重阻礙了基于Web應(yīng)用程序的交互,也影響用戶的交互體驗(yàn)。某些網(wǎng)站需要用戶登錄才進(jìn)一步操作,用戶在輸入賬號(hào)密碼登錄后,才能瀏覽頁(yè)面。對(duì)于服務(wù)器而言,由于HTTP的無(wú)狀態(tài)性,服務(wù)器并不知道用戶有沒(méi)有登錄過(guò),當(dāng)用戶退出當(dāng)前頁(yè)面訪問(wèn)其他頁(yè)面時(shí),又需重新再次輸入賬號(hào)及密碼。熟悉CookieHTTP是一種無(wú)狀態(tài)的協(xié)議,客戶端與服務(wù)器建立連接并傳輸數(shù)據(jù)為解決HTTP的無(wú)狀態(tài)性帶來(lái)的負(fù)面作用,Cookie機(jī)制應(yīng)運(yùn)而生。Cookie本質(zhì)上是一段文本信息。當(dāng)客戶端請(qǐng)求服務(wù)器時(shí),若服務(wù)器需要記錄用戶狀態(tài),就在響應(yīng)用戶請(qǐng)求時(shí)發(fā)送一段Cookie信息??蛻舳藶g覽器會(huì)保存該Cookie信息,當(dāng)用戶再次訪問(wèn)該網(wǎng)站時(shí),瀏覽器會(huì)把Cookie做為請(qǐng)求信息的一部分提交給服務(wù)器。服務(wù)器對(duì)Cookie進(jìn)行驗(yàn)證,以此來(lái)判斷用戶狀態(tài),當(dāng)且僅當(dāng)該Cookie合法且未過(guò)期時(shí),用戶才可直接登錄網(wǎng)站。熟悉Cookie1.Cookie機(jī)制為解決HTTP的無(wú)狀態(tài)性帶來(lái)的負(fù)面作用,Cookie機(jī)制應(yīng)運(yùn)Cookie由用戶客戶端瀏覽器進(jìn)行保存,按其存儲(chǔ)位置可分為內(nèi)存式存儲(chǔ)和硬盤式存儲(chǔ)。內(nèi)存式存儲(chǔ)將Cookie保存在內(nèi)存中,在瀏覽器關(guān)閉后就會(huì)消失,由于其存儲(chǔ)時(shí)間較短,因此也被稱為非持久Cookie或會(huì)話Cookie。硬盤式存儲(chǔ)將Cookie保存在硬盤中,其不會(huì)隨瀏覽器的關(guān)閉而消失,除非用戶手工清理或到了過(guò)期時(shí)間。由于硬盤式Cookie存儲(chǔ)時(shí)間是長(zhǎng)期的,因此也被稱為持久Cookie。熟悉Cookie2.Cookie的存儲(chǔ)方式Cookie由用戶客戶端瀏覽器進(jìn)行保存,按其存儲(chǔ)位置可分為內(nèi)客戶端與服務(wù)器間的Cookie實(shí)現(xiàn)過(guò)程的具體步驟如下??蛻舳苏?qǐng)求服務(wù)器:客戶端請(qǐng)求網(wǎng)站頁(yè)面服務(wù)器響應(yīng)請(qǐng)求:Cookie是一種字符串,為key=value形式,服務(wù)器需要記錄這個(gè)客戶端請(qǐng)求的狀態(tài),在響應(yīng)頭中增加一個(gè)Set-Cookie字段??蛻舳嗽俅握?qǐng)求服務(wù)器:客戶端會(huì)對(duì)服務(wù)器響應(yīng)的Set-Cookie頭信息進(jìn)行存儲(chǔ)。當(dāng)再次請(qǐng)求時(shí),將會(huì)在請(qǐng)求頭中包含服務(wù)器響應(yīng)的Cookie信息。熟悉Cookie3.Cookie的實(shí)現(xiàn)過(guò)程客戶端與服務(wù)器間的Cookie實(shí)現(xiàn)過(guò)程的具體步驟如下。熟悉C1認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)31認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)3本章介紹了Python中的底層Socket庫(kù),及運(yùn)用socket庫(kù)建立TCP和UDP連接。并對(duì)超文本傳輸協(xié)議(HTTP)及其相關(guān)機(jī)制進(jìn)行了簡(jiǎn)要介紹。對(duì)本章做小結(jié)如下。
Socket庫(kù)提供多種協(xié)議類型和函數(shù),可用于建立TCP和UDP連接。HTTP協(xié)議基于TCP協(xié)議進(jìn)行客戶端與服務(wù)器間的通訊,由客戶端發(fā)起請(qǐng)求,服務(wù)器進(jìn)行應(yīng)答。HTTP狀態(tài)碼由3位數(shù)字構(gòu)成,按首位數(shù)字可分為5類狀態(tài)碼。HTTP頭部信息為HTTP協(xié)議的請(qǐng)求與響應(yīng)消息中的消息頭部分,其定義了該次傳輸事務(wù)中的操作參數(shù)。
Cookie機(jī)制可記錄用戶狀態(tài),服務(wù)器可依據(jù)Cookie對(duì)用戶狀態(tài)進(jìn)行記錄與識(shí)別。小結(jié)本章介紹了Python中的底層Socket庫(kù),及運(yùn)用sock配套的課程視頻、實(shí)訓(xùn)資源、實(shí)訓(xùn)環(huán)境等資源:
/course/179配套的課程視頻、實(shí)訓(xùn)資源、實(shí)訓(xùn)環(huán)境等資源:https://網(wǎng)頁(yè)前端基礎(chǔ)2023/1/2網(wǎng)頁(yè)前端基礎(chǔ)2022/12/181認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)31認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)3網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket。套接字是socket的通常叫法,用于描述IP地址和端口,是一個(gè)通信鏈的句柄,可以用來(lái)實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信。Python中Socket庫(kù)為操作系統(tǒng)的socket實(shí)現(xiàn)提供了一個(gè)Python接口。Python網(wǎng)絡(luò)編程Socket庫(kù)套接字(socket)網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連socket庫(kù)中整合了多種協(xié)議類型。Python網(wǎng)絡(luò)編程Socket庫(kù)1.socket協(xié)議類型socket協(xié)議類型描述socket.AF_UNIX用于同一臺(tái)機(jī)器上的進(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ù)報(bào)式socket通信socket.SOCK_RAW原始套接字,普通的套接字無(wú)法處理ICMP、IGMP等網(wǎng)絡(luò)報(bào)文,而SOCK_RAW可以;其次SOCK_RAW也可以處理特殊的IPV4報(bào)文;此外,利用原始套接字,可以通過(guò)IP_HDRINCL套接字選項(xiàng)由用戶構(gòu)造IP頭socket.SOCK_SEQPACKET可靠的連續(xù)數(shù)據(jù)包服務(wù)socket庫(kù)中整合了多種協(xié)議類型。Python網(wǎng)絡(luò)編程So服務(wù)器端Socket函數(shù):socket庫(kù)中的服務(wù)器端函數(shù)僅供服務(wù)器使用。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述socket.bind(address)將套接字綁定到地址,在AF_INET協(xié)議下,以tuple(host,port)的方式傳入,如socket.bind((host,port)),其中host為綁定的地址,port為監(jiān)聽(tīng)的端口socket.listen(backlog)開(kāi)始監(jiān)聽(tīng)TCP傳入連接,backlog指定在拒絕鏈接前,操作系統(tǒng)可以掛起的最大連接數(shù),該值最少為1,大部分應(yīng)用程序通常設(shè)為5socket.accept()接受TCP鏈接并返回(conn,address),其中conn是新的套接字對(duì)象,可以用來(lái)接收和發(fā)送數(shù)據(jù),address是鏈接客戶端的地址服務(wù)器端Socket函數(shù):socket庫(kù)中的服務(wù)器端函數(shù)僅供客戶端Socket函數(shù):socket庫(kù)中的客戶端函數(shù)僅供客戶端使用。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述socket.connect(address)連接到address處的套接字,一般address的格式為tuple(host,port),若連接出錯(cuò),則返回socket.error錯(cuò)誤socket.connect_ex(address)功能與socket.connect相同,但成功返回0,失敗返回error的值客戶端Socket函數(shù):socket庫(kù)中的客戶端函數(shù)僅供客戶公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述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庫(kù)中的公共函數(shù)即可在服務(wù)器公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述socket.getpeername()返回套接字的遠(yuǎn)程地址,返回值通常是一個(gè)tuple(ipaddr,port)socket.getsockname()返回套接字自己的地址,返回值通常是一個(gè)tuple(ipaddr,port)socket.setsockopt(level,optname,value)設(shè)置給定套接字選項(xiàng)的值socket.getsockopt(level,optname[,buflen])返回套接字選項(xiàng)的值公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡(luò)編程Socket庫(kù)2.socket函數(shù)語(yǔ)法格式描述socket.settimeout(timeout)設(shè)置套接字操作的超時(shí)時(shí)間,timeout是一個(gè)浮點(diǎn)數(shù),單位是秒,值為None時(shí)表示永遠(yuǎn)不會(huì)超時(shí)。超時(shí)時(shí)間應(yīng)在剛創(chuàng)建套接字時(shí)設(shè)置,因?yàn)樗鼈兛赡苡糜谶B接的操作,如s.connect()socket.gettimeout()返回當(dāng)前超時(shí)值,單位是秒,如果沒(méi)有設(shè)置超時(shí)則返回Nonesocket.fileno()返回套接字的文件描述socket.makefile()創(chuàng)建一個(gè)與該套接字相關(guān)的文件公共Socket函數(shù):socket庫(kù)中的公共函數(shù)即可在服務(wù)器TCP連接由客戶端發(fā)起,服務(wù)器對(duì)連接進(jìn)行響應(yīng)。建立一個(gè)服務(wù)器,服務(wù)器進(jìn)程需要綁定一個(gè)端口并監(jiān)聽(tīng)來(lái)自其他客戶端的連接。若有客戶端發(fā)起連接請(qǐng)求,服務(wù)器就與該客戶端建立Socket連接,隨后的通信就通過(guò)此Socket連接進(jìn)行。服務(wù)器依賴服務(wù)器地址,服務(wù)器端口,客戶端地址,客戶端端口這4項(xiàng)來(lái)唯一確定一個(gè)Socket連接。使用Socket進(jìn)行TCP編程TCP連接由客戶端發(fā)起,服務(wù)器對(duì)連接進(jìn)行響應(yīng)。使用Socke建立服務(wù)器端的TCP連接,具體步驟如下。在Python中創(chuàng)建一個(gè)基于IPv4和TCP協(xié)議的Socket。綁定監(jiān)聽(tīng)的地址和端口,地址使用本機(jī)地址“”或“l(fā)ocalhost”,使用大于1024的端口。調(diào)用listen方法開(kāi)始監(jiān)聽(tīng)端口,傳入的參數(shù)指定等待連接的最大數(shù)量,設(shè)定為5。創(chuàng)建一個(gè)tcp函數(shù),該函數(shù)在連接建立后,服務(wù)器端首先發(fā)出一條表示連接成功的消息,然后等待客戶端數(shù)據(jù),再加上歡迎信息發(fā)送給客戶端。若客戶端發(fā)送exit字符串,則直接關(guān)閉連接。通過(guò)一個(gè)循環(huán)接受來(lái)自客戶端的連接,使用accept函數(shù)等待并返回一個(gè)客戶端的連接,每個(gè)連接都分配一個(gè)新線程來(lái)處理。使用Socket進(jìn)行TCP編程1.服務(wù)器端TCP連接建立服務(wù)器端的TCP連接,具體步驟如下。使用Socket進(jìn)行在服務(wù)器端TCP連接建立后,建立客戶端TCP連接進(jìn)行測(cè)試,具體步驟如下。與服務(wù)器端的協(xié)議保持一致,也建立一個(gè)基于IPv4和TCP協(xié)議的Socket。與服務(wù)器端建立連接,連接的地址與端口需與服務(wù)器端保持一致。使用recv函數(shù)接受服務(wù)器提示信息,之后再使用send函數(shù)發(fā)送數(shù)據(jù)至服務(wù)器,可看到服務(wù)器返回的結(jié)果。使用Socket進(jìn)行TCP編程2.客戶端TCP連接在服務(wù)器端TCP連接建立后,建立客戶端TCP連接進(jìn)行測(cè)試,具TCP建立的連接可靠,通信雙方以流的形式互相傳送數(shù)據(jù)。相對(duì)TCP協(xié)議,UDP則是面向無(wú)連接的協(xié)議。使用UDP協(xié)議時(shí),無(wú)需建立連接的過(guò)程,僅需知道對(duì)方的IP地址及端口號(hào),便可直接發(fā)送數(shù)據(jù)包,但無(wú)法保證能順利傳達(dá)到。雖然用UDP傳輸數(shù)據(jù)不可靠,但其傳輸速度比TCP快,對(duì)于不要求可靠到達(dá)的數(shù)據(jù),就可以使用UDP協(xié)議。UDP傳輸通常應(yīng)用在通訊實(shí)時(shí)性要求更高于可靠性場(chǎng)景,例如網(wǎng)絡(luò)游戲。使用Socket進(jìn)行UDP編程TCP建立的連接可靠,通信雙方以流的形式互相傳送數(shù)據(jù)。相對(duì)TUDP連接與TCP連接類似,也分為服務(wù)器端和客戶端,不同的是UDP連接無(wú)需調(diào)用listen方法,直接接受來(lái)自任何客戶端的數(shù)據(jù)。建立UDP連接,服務(wù)器端同樣需要綁定地址與端口。使用recvfrom方法返回?cái)?shù)據(jù)及客戶端的地址與端口。當(dāng)服務(wù)器收到數(shù)據(jù)后,直接調(diào)用sendto把數(shù)據(jù)用UDP發(fā)給客戶端。使用Socket進(jìn)行UDP編程1.服務(wù)器端UDP連接UDP連接與TCP連接類似,也分為服務(wù)器端和客戶端,不同的是客戶端使用UDP連接時(shí)同樣需要先創(chuàng)建socket。之后無(wú)需使用connect方法,直接用sendto方法發(fā)送數(shù)據(jù)至服務(wù)器建立UDP連接,服務(wù)器端同樣需要綁定地址與端口。UDP連接與TCP連接可同時(shí)使用同一端口互不沖突,兩者使用的端口是獨(dú)立綁定的。使用Socket進(jìn)行UDP編程2.客戶端UDP連接客戶端使用UDP連接時(shí)同樣需要先創(chuàng)建socket。使用Soc1認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)31認(rèn)識(shí)HTTP協(xié)議目錄認(rèn)識(shí)Python網(wǎng)絡(luò)編程2小結(jié)3爬蟲(chóng)在爬取數(shù)據(jù)時(shí)將會(huì)作為客戶端模擬整個(gè)HTTP通信過(guò)程,該過(guò)程也需要通過(guò)HTTP協(xié)議實(shí)現(xiàn)。HTTP請(qǐng)求過(guò)程如下。由HTTP客戶端向服務(wù)器發(fā)起一個(gè)請(qǐng)求,創(chuàng)建一個(gè)到服務(wù)器指定端口(默認(rèn)是80端口)的TCP連接。HTTP服務(wù)器從該端口監(jiān)聽(tīng)客戶端的請(qǐng)求。一旦收到請(qǐng)求,服務(wù)器會(huì)向客戶端返回一個(gè)狀態(tài),比如“HTTP/1.1200OK”,以及返回的響應(yīng)內(nèi)容,如請(qǐng)求的文件、錯(cuò)誤消息、或其它信息。HTTP請(qǐng)求方式與過(guò)程爬蟲(chóng)在爬取數(shù)據(jù)時(shí)將會(huì)作為客戶端模擬整個(gè)HTTP通信過(guò)程,該過(guò)在HTTP/1.1協(xié)議中共定義了8種方法(也叫“動(dòng)作”)來(lái)以不同方式操作指定的資源,常用方法有GET、HEAD、POST等。HTTP請(qǐng)求方式與過(guò)程1.請(qǐng)求方法請(qǐng)求方法方法描述GET請(qǐng)求指定的頁(yè)面信息,并返回實(shí)體主體。GET可能會(huì)被網(wǎng)絡(luò)爬蟲(chóng)等隨意訪問(wèn),因此GET方法應(yīng)該只用在讀取數(shù)據(jù),而不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在WebApplication中HEAD與GET方法一樣,都是向服務(wù)器發(fā)出指定資源的請(qǐng)求。只不過(guò)服務(wù)器將不傳回具體的內(nèi)容,使用這個(gè)方法可以在不必傳輸全部?jī)?nèi)容的情況下,就可以獲取其中該資源的相關(guān)信息(元信息或稱元數(shù)據(jù))POST向指定資源提交數(shù)據(jù),請(qǐng)求服務(wù)器進(jìn)行處理(例如提交表單或者上傳文件)。數(shù)據(jù)會(huì)被包含在請(qǐng)求中,這個(gè)請(qǐng)求可能會(huì)創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有PUT從客戶端上傳指定資源的最新內(nèi)容,即更新服務(wù)器端的指定資源。在HTTP/1.1協(xié)議中共定義了8種方法(也叫“動(dòng)作”)來(lái)以HTTP協(xié)議采用了請(qǐng)求/響應(yīng)模型??蛻舳讼蚍?wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文,請(qǐng)求報(bào)文包含請(qǐng)求的方法、URL、協(xié)議版本、請(qǐng)求頭部和請(qǐng)求數(shù)據(jù)。服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、響應(yīng)狀態(tài)、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。HTTP請(qǐng)求方式與過(guò)程2.請(qǐng)求(request)與響應(yīng)(response)HTTP協(xié)議采用了請(qǐng)求/響應(yīng)模型。HTTP請(qǐng)求方式與過(guò)程2.客戶端與服務(wù)器間的請(qǐng)求與響應(yīng)的具體步驟如下。連接Web服務(wù)器:由一個(gè)HTTP客戶端發(fā)起連接,與Web服務(wù)器的HTTP端口(默認(rèn)為80)建立一個(gè)TCP套接字連接。發(fā)送HTTP請(qǐng)求:客戶端經(jīng)TCP套接字向Web服務(wù)器發(fā)送一個(gè)文本的請(qǐng)求報(bào)文。服務(wù)器接受請(qǐng)求并返回HTTP響應(yīng):Web服務(wù)器解析請(qǐng)求,定位該次的請(qǐng)求資源。之后將資源復(fù)本寫至TCP套接字,由客戶端進(jìn)行讀取。釋放連接TCP連接:若連接的connection模式為close,則由服務(wù)器主動(dòng)關(guān)閉TCP連接,客戶端將被動(dòng)關(guān)閉連接,釋放TCP連接;若connection模式為keepalive,則該連接會(huì)保持一段時(shí)間??蛻舳私馕鯤TML內(nèi)容:客戶端首先會(huì)對(duì)狀態(tài)行進(jìn)行解析,之后解析每一個(gè)響應(yīng)頭,最后讀取響應(yīng)數(shù)據(jù)。HTTP請(qǐng)求方式與過(guò)程2.請(qǐng)求(request)與響應(yīng)(response)客戶端與服務(wù)器間的請(qǐng)求與響應(yīng)的具體步驟如下。HTTP請(qǐng)求方式HTTP狀態(tài)碼是用來(lái)表示網(wǎng)頁(yè)服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼,按首位數(shù)字分為5類狀態(tài)碼。常見(jiàn)HTTP狀態(tài)碼1.HTTP狀態(tài)碼種類狀態(tài)碼類型狀態(tài)碼意義1XX表示請(qǐng)求已被接受,需接后續(xù)處理。這類響應(yīng)是臨時(shí)響應(yīng),只包含狀態(tài)行和某些可選的響應(yīng)頭信息,并以空行結(jié)束2XX表示請(qǐng)求已成功被服務(wù)器接收、理解并接受3XX表示需要客戶端采取進(jìn)一步的操作才能完成請(qǐng)求。通常用來(lái)重定向,重定向目標(biāo)需在本次響應(yīng)中指明4XX表示客戶端可能發(fā)生了錯(cuò)誤,妨礙了服務(wù)器的處理。5XX表示服務(wù)器在處理請(qǐng)求的過(guò)程中有錯(cuò)誤或者異常狀態(tài)發(fā)生,也有可能是服務(wù)器以當(dāng)前的軟硬件資源無(wú)法完成對(duì)請(qǐng)求的處理。HTTP狀態(tài)碼是用來(lái)表示網(wǎng)頁(yè)服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼,按HTTP狀態(tài)碼共有67種狀態(tài)碼,常見(jiàn)的狀態(tài)碼如下。常見(jiàn)HTTP狀態(tài)碼2.常見(jiàn)HTTP狀態(tài)碼常見(jiàn)狀態(tài)碼狀態(tài)碼含義200OK請(qǐng)求成功,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回。400BadRequest由于客戶端的語(yǔ)法錯(cuò)誤、無(wú)效的請(qǐng)求或欺騙性路由請(qǐng)求,服務(wù)器不會(huì)處理該請(qǐng)求403Forbidden服務(wù)器已經(jīng)理解該請(qǐng)求,但是拒絕執(zhí)行,將在返回的實(shí)體內(nèi)描述拒絕的原因,也可以不描述僅返回404響應(yīng)404NotFound請(qǐng)求失敗,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn),但允許用戶的后續(xù)請(qǐng)求500InternalServerError通用錯(cuò)誤消息,服務(wù)器遇到了一個(gè)未曾預(yù)料的狀況,導(dǎo)致了它無(wú)法完成對(duì)請(qǐng)求的處理,不會(huì)給出具體錯(cuò)誤信息503ServiceUnavailable由于臨時(shí)的服務(wù)器維護(hù)或者過(guò)載,服務(wù)器當(dāng)前無(wú)法處理請(qǐng)求。這個(gè)狀況是暫時(shí)的,并且將在一段時(shí)間以后恢復(fù)HTTP狀態(tài)碼共有67種狀態(tài)碼,常見(jiàn)的狀態(tài)碼如下。常見(jiàn)HTTHTTP頭部信息(HTTPheaderfields)是指在超文本傳輸協(xié)議(HTTP)的請(qǐng)求和響應(yīng)消息中的消息頭部分。頭部信息定義了一個(gè)超文本傳輸協(xié)議事務(wù)中的操作參數(shù)。在爬蟲(chóng)中需要使用頭部信息向服務(wù)器發(fā)送模擬信息,通過(guò)發(fā)送模擬的頭部信息將自己偽裝成一般的客戶端。HTTP頭部信息HTTP頭部信息(HTTPheaderfields)是指HTTP頭部類型按用途可分為:通用頭,請(qǐng)求頭,響應(yīng)頭,實(shí)體頭。通用頭:既適用于客戶端的請(qǐng)求頭,也適用于服務(wù)端的響應(yīng)頭。與HTTP消息體內(nèi)最終傳輸?shù)臄?shù)據(jù)是無(wú)關(guān)的,只適用于要發(fā)送的消息。請(qǐng)求頭:提供更為精確的描述信息,其對(duì)象為所請(qǐng)求的資源或請(qǐng)求本身。新版HTTP增加的請(qǐng)求頭不能在更低版本的HTTP中使用,但服務(wù)器和客戶端若都能對(duì)相關(guān)頭進(jìn)行處理,則可以在請(qǐng)求中使用。響應(yīng)頭:為響應(yīng)消息提供了更多信息。例如,關(guān)于資源位置的描述Location字段,以及關(guān)于服務(wù)器本身的描述使用Server字段等。與請(qǐng)求頭類似,新版增加的響應(yīng)頭也不能在更低版本的HTTP版本中使用。實(shí)體頭:提供了關(guān)于消息體的描述。如消息體的長(zhǎng)度Content-Length,消息體的MIME類型Content-Type。新版的實(shí)體頭可以在更低版本的HTTP版本中使用。HTTP頭部信息1.HTTP頭部類型HTTP頭部類型按用途可分為:通用頭,請(qǐng)求頭,響應(yīng)頭,實(shí)體頭HTTP頭字段根據(jù)實(shí)際用途被分為4種類型:通用頭字段(GeneralHeaderFields),請(qǐng)求頭字段(RequestHeaderFields),響應(yīng)頭字段(ResponseHeaderFields),實(shí)體頭字段(EntityHeaderFields)。HTTP頭部信息2.常用頭字段字段名說(shuō)明示例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)容語(yǔ)言列表Accept-Language:en
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026河南省中原資產(chǎn)管理有限公司招聘5人備考題庫(kù)及一套答案詳解
- 2026湖北武漢格魯伯實(shí)驗(yàn)學(xué)校招聘3人備考題庫(kù)及答案詳解(易錯(cuò)題)
- 2026貴州安順市集圣中學(xué)教師招聘、學(xué)生成長(zhǎng)中心干事招聘?jìng)淇碱}庫(kù)及答案詳解(易錯(cuò)題)
- 2026湖南郴州林邑中學(xué)春季招聘代課教師1人備考題庫(kù)完整參考答案詳解
- 2026浙江溫州市第二十二中學(xué)招聘1人備考題庫(kù)及完整答案詳解1套
- 菜場(chǎng)應(yīng)急預(yù)案(3篇)
- 2026貴州安順市平壩區(qū)夏云鎮(zhèn)幼兒園(二幼、三幼)教師招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 電氣檢測(cè)考試題及答案
- 待崗人員考試題及答案
- 池塘捕魚(yú)考試題及答案
- 7.1《集體生活成就我》課件 2025-2026道德與法治七年級(jí)上冊(cè) 統(tǒng)編版
- 瓦斯發(fā)電安全規(guī)程培訓(xùn)課件
- 私有云入門課件
- 財(cái)政評(píng)審廉政管理辦法
- 公司人員服從管理制度
- 演出單位薪酬管理制度
- 企業(yè)財(cái)務(wù)數(shù)字化轉(zhuǎn)型的路徑規(guī)劃及實(shí)施方案設(shè)計(jì)
- DB32T 1712-2011 水利工程鑄鐵閘門設(shè)計(jì)制造安裝驗(yàn)收規(guī)范
- 百度人才特質(zhì)在線測(cè)評(píng)題
- DL∕T 5142-2012 火力發(fā)電廠除灰設(shè)計(jì)技術(shù)規(guī)程
- 2024年水合肼行業(yè)發(fā)展現(xiàn)狀分析:水合肼市場(chǎng)需求量約為11.47萬(wàn)噸
評(píng)論
0/150
提交評(píng)論