第2章-網(wǎng)頁前端基礎_第1頁
第2章-網(wǎng)頁前端基礎_第2頁
第2章-網(wǎng)頁前端基礎_第3頁
第2章-網(wǎng)頁前端基礎_第4頁
第2章-網(wǎng)頁前端基礎_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

網(wǎng)頁前端基礎2024/9/301認識HTTP協(xié)議目錄認識Python網(wǎng)絡編程2小結(jié)3網(wǎng)絡上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個socket。套接字是socket的通常叫法,用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現(xiàn)不同虛擬機或不同計算機之間的通信。Python中Socket庫為操作系統(tǒng)的socket實現(xiàn)提供了一個Python接口。Python網(wǎng)絡編程Socket庫套接字(socket)socket庫中整合了多種協(xié)議類型。Python網(wǎng)絡編程Socket庫1.socket協(xié)議類型socket協(xié)議類型描述socket.AF_UNIX用于同一臺機器上的進程通信(本地通信)socket.AF_INET用于服務器與服務器之間的網(wǎng)絡通信socket.AF_INET6基于IPV6方式的服務器與服務器之間的網(wǎng)絡通信socket.SOCK_STREAM基于TCP的流式socket通信socket.SOCK_DGRAM基于UDP的數(shù)據(jù)報式socket通信socket.SOCK_RAW原始套接字,普通的套接字無法處理ICMP、IGMP等網(wǎng)絡報文,而SOCK_RAW可以;其次SOCK_RAW也可以處理特殊的IPV4報文;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項由用戶構(gòu)造IP頭socket.SOCK_SEQPACKET可靠的連續(xù)數(shù)據(jù)包服務服務器端Socket函數(shù):socket庫中的服務器端函數(shù)僅供服務器使用。Python網(wǎng)絡編程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,大部分應用程序通常設為5socket.accept()接受TCP鏈接并返回(conn,address),其中conn是新的套接字對象,可以用來接收和發(fā)送數(shù)據(jù),address是鏈接客戶端的地址客戶端Socket函數(shù):socket庫中的客戶端函數(shù)僅供客戶端使用。Python網(wǎng)絡編程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ù)即可在服務器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡編程Socket庫2.socket函數(shù)語法格式描述socket.recv(buffsize[,flag])接受TCP套接字的數(shù)據(jù),數(shù)據(jù)以字符串形式返回,buffsize指定要接受的最大數(shù)據(jù)量,flag提供有關消息的其他信息,通??梢院雎詓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),指定遠程地址發(fā)送,返回值是發(fā)送的字節(jié)數(shù)socket.close()關閉套接字公共Socket函數(shù):socket庫中的公共函數(shù)即可在服務器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡編程Socket庫2.socket函數(shù)語法格式描述socket.getpeername()返回套接字的遠程地址,返回值通常是一個tuple(ipaddr,port)socket.getsockname()返回套接字自己的地址,返回值通常是一個tuple(ipaddr,port)socket.setsockopt(level,optname,value)設置給定套接字選項的值socket.getsockopt(level,optname[,buflen])返回套接字選項的值公共Socket函數(shù):socket庫中的公共函數(shù)即可在服務器端使用也可在客戶端使用,為通用函數(shù)。Python網(wǎng)絡編程Socket庫2.socket函數(shù)語法格式描述socket.settimeout(timeout)設置套接字操作的超時時間,timeout是一個浮點數(shù),單位是秒,值為None時表示永遠不會超時。超時時間應在剛創(chuàng)建套接字時設置,因為它們可能用于連接的操作,如s.connect()socket.gettimeout()返回當前超時值,單位是秒,如果沒有設置超時則返回Nonesocket.fileno()返回套接字的文件描述socket.makefile()創(chuàng)建一個與該套接字相關的文件TCP連接由客戶端發(fā)起,服務器對連接進行響應。建立一個服務器,服務器進程需要綁定一個端口并監(jiān)聽來自其他客戶端的連接。若有客戶端發(fā)起連接請求,服務器就與該客戶端建立Socket連接,隨后的通信就通過此Socket連接進行。服務器依賴服務器地址,服務器端口,客戶端地址,客戶端端口這4項來唯一確定一個Socket連接。使用Socket進行TCP編程建立服務器端的TCP連接,具體步驟如下。在Python中創(chuàng)建一個基于IPv4和TCP協(xié)議的Socket。綁定監(jiān)聽的地址和端口,地址使用本機地址“”或“l(fā)ocalhost”,使用大于1024的端口。調(diào)用listen方法開始監(jiān)聽端口,傳入的參數(shù)指定等待連接的最大數(shù)量,設定為5。創(chuàng)建一個tcp函數(shù),該函數(shù)在連接建立后,服務器端首先發(fā)出一條表示連接成功的消息,然后等待客戶端數(shù)據(jù),再加上歡迎信息發(fā)送給客戶端。若客戶端發(fā)送exit字符串,則直接關閉連接。通過一個循環(huán)接受來自客戶端的連接,使用accept函數(shù)等待并返回一個客戶端的連接,每個連接都分配一個新線程來處理。使用Socket進行TCP編程1.服務器端TCP連接在服務器端TCP連接建立后,建立客戶端TCP連接進行測試,具體步驟如下。與服務器端的協(xié)議保持一致,也建立一個基于IPv4和TCP協(xié)議的Socket。與服務器端建立連接,連接的地址與端口需與服務器端保持一致。使用recv函數(shù)接受服務器提示信息,之后再使用send函數(shù)發(fā)送數(shù)據(jù)至服務器,可看到服務器返回的結(jié)果。使用Socket進行TCP編程2.客戶端TCP連接TCP建立的連接可靠,通信雙方以流的形式互相傳送數(shù)據(jù)。相對TCP協(xié)議,UDP則是面向無連接的協(xié)議。使用UDP協(xié)議時,無需建立連接的過程,僅需知道對方的IP地址及端口號,便可直接發(fā)送數(shù)據(jù)包,但無法保證能順利傳達到。雖然用UDP傳輸數(shù)據(jù)不可靠,但其傳輸速度比TCP快,對于不要求可靠到達的數(shù)據(jù),就可以使用UDP協(xié)議。UDP傳輸通常應用在通訊實時性要求更高于可靠性場景,例如網(wǎng)絡游戲。使用Socket進行UDP編程UDP連接與TCP連接類似,也分為服務器端和客戶端,不同的是UDP連接無需調(diào)用listen方法,直接接受來自任何客戶端的數(shù)據(jù)。建立UDP連接,服務器端同樣需要綁定地址與端口。使用recvfrom方法返回數(shù)據(jù)及客戶端的地址與端口。當服務器收到數(shù)據(jù)后,直接調(diào)用sendto把數(shù)據(jù)用UDP發(fā)給客戶端。使用Socket進行UDP編程1.服務器端UDP連接客戶端使用UDP連接時同樣需要先創(chuàng)建socket。之后無需使用connect方法,直接用sendto方法發(fā)送數(shù)據(jù)至服務器建立UDP連接,服務器端同樣需要綁定地址與端口。UDP連接與TCP連接可同時使用同一端口互不沖突,兩者使用的端口是獨立綁定的。使用Socket進行UDP編程2.客戶端UDP連接1認識HTTP協(xié)議目錄認識Python網(wǎng)絡編程2小結(jié)3爬蟲在爬取數(shù)據(jù)時將會作為客戶端模擬整個HTTP通信過程,該過程也需要通過HTTP協(xié)議實現(xiàn)。HTTP請求過程如下。由HTTP客戶端向服務器發(fā)起一個請求,創(chuàng)建一個到服務器指定端口(默認是80端口)的TCP連接。HTTP服務器從該端口監(jiān)聽客戶端的請求。一旦收到請求,服務器會向客戶端返回一個狀態(tài),比如“HTTP/1.1200OK”,以及返回的響應內(nèi)容,如請求的文件、錯誤消息、或其它信息。HTTP請求方式與過程在HTTP/1.1協(xié)議中共定義了8種方法(也叫“動作”)來以不同方式操作指定的資源,常用方法有GET、HEAD、POST等。HTTP請求方式與過程1.請求方法請求方法方法描述GET請求指定的頁面信息,并返回實體主體。GET可能會被網(wǎng)絡爬蟲等隨意訪問,因此GET方法應該只用在讀取數(shù)據(jù),而不應當被用于產(chǎn)生“副作用”的操作中,例如在WebApplication中HEAD與GET方法一樣,都是向服務器發(fā)出指定資源的請求。只不過服務器將不傳回具體的內(nèi)容,使用這個方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲取其中該資源的相關信息(元信息或稱元數(shù)據(jù))POST向指定資源提交數(shù)據(jù),請求服務器進行處理(例如提交表單或者上傳文件)。數(shù)據(jù)會被包含在請求中,這個請求可能會創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有PUT從客戶端上傳指定資源的最新內(nèi)容,即更新服務器端的指定資源。HTTP協(xié)議采用了請求/響應模型??蛻舳讼蚍掌靼l(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務器以一個狀態(tài)行作為響應,響應的內(nèi)容包括協(xié)議的版本、響應狀態(tài)、服務器信息、響應頭部和響應數(shù)據(jù)。HTTP請求方式與過程2.請求(request)與響應(response)客戶端與服務器間的請求與響應的具體步驟如下。連接Web服務器:由一個HTTP客戶端發(fā)起連接,與Web服務器的HTTP端口(默認為80)建立一個TCP套接字連接。發(fā)送HTTP請求:客戶端經(jīng)TCP套接字向Web服務器發(fā)送一個文本的請求報文。服務器接受請求并返回HTTP響應:Web服務器解析請求,定位該次的請求資源。之后將資源復本寫至TCP套接字,由客戶端進行讀取。釋放連接TCP連接:若連接的connection模式為close,則由服務器主動關閉TCP連接,客戶端將被動關閉連接,釋放TCP連接;若connection模式為keepalive,則該連接會保持一段時間??蛻舳私馕鯤TML內(nèi)容:客戶端首先會對狀態(tài)行進行解析,之后解析每一個響應頭,最后讀取響應數(shù)據(jù)。HTTP請求方式與過程2.請求(request)與響應(response)HTTP狀態(tài)碼是用來表示網(wǎng)頁服務器響應狀態(tài)的3位數(shù)字代碼,按首位數(shù)字分為5類狀態(tài)碼。常見HTTP狀態(tài)碼1.HTTP狀態(tài)碼種類狀態(tài)碼類型狀態(tài)碼意義1XX表示請求已被接受,需接后續(xù)處理。這類響應是臨時響應,只包含狀態(tài)行和某些可選的響應頭信息,并以空行結(jié)束2XX表示請求已成功被服務器接收、理解并接受3XX表示需要客戶端采取進一步的操作才能完成請求。通常用來重定向,重定向目標需在本次響應中指明4XX表示客戶端可能發(fā)生了錯誤,妨礙了服務器的處理。5XX表示服務器在處理請求的過程中有錯誤或者異常狀態(tài)發(fā)生,也有可能是服務器以當前的軟硬件資源無法完成對請求的處理。HTTP狀態(tài)碼共有67種狀態(tài)碼,常見的狀態(tài)碼如下。常見HTTP狀態(tài)碼2.常見HTTP狀態(tài)碼常見狀態(tài)碼狀態(tài)碼含義200OK請求成功,請求所希望的響應頭或數(shù)據(jù)體將隨此響應返回。400BadRequest由于客戶端的語法錯誤、無效的請求或欺騙性路由請求,服務器不會處理該請求403Forbidden服務器已經(jīng)理解該請求,但是拒絕執(zhí)行,將在返回的實體內(nèi)描述拒絕的原因,也可以不描述僅返回404響應404NotFound請求失敗,請求所希望得到的資源未被在服務器上發(fā)現(xiàn),但允許用戶的后續(xù)請求500InternalServerError通用錯誤消息,服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理,不會給出具體錯誤信息503ServiceUnavailable由于臨時的服務器維護或者過載,服務器當前無法處理請求。這個狀況是暫時的,并且將在一段時間以后恢復HTTP頭部信息(HTTPheaderfields)是指在超文本傳輸協(xié)議(HTTP)的請求和響應消息中的消息頭部分。頭部信息定義了一個超文本傳輸協(xié)議事務中的操作參數(shù)。在爬蟲中需要使用頭部信息向服務器發(fā)送模擬信息,通過發(fā)送模擬的頭部信息將自己偽裝成一般的客戶端。HTTP頭部信息HTTP頭部類型按用途可分為:通用頭,請求頭,響應頭,實體頭。通用頭:既適用于客戶端的請求頭,也適用于服務端的響應頭。與HTTP消息體內(nèi)最終傳輸?shù)臄?shù)據(jù)是無關的,只適用于要發(fā)送的消息。請求頭:提供更為精確的描述信息,其對象為所請求的資源或請求本身。新版HTTP增加的請求頭不能在更低版本的HTTP中使用,但服務器和客戶端若都能對相關頭進行處理,則可以在請求中使用。響應頭:為響應消息提供了更多信息。例如,關于資源位置的描述Location字段,以及關于服務器本身的描述使用Server字段等。與請求頭類似,新版增加的響應頭也不能在更低版本的HTTP版本中使用。實體頭:提供了關于消息體的描述。如消息體的長度Content-Length,消息體的MIME類型Content-Type。新版的實體頭可以在更低版本的HTTP版本中使用。HTTP頭部信息1.HTTP頭部類型HTTP頭字段根據(jù)實際用途被分為4種類型:通用頭字段(GeneralHeaderFields),請求頭字段(RequestHeaderFields),響應頭字段(ResponseHeaderFields),實體頭字段(EntityHeaderFields)。HTTP頭部信息2.常用頭字段字段名說明示例Accept可接受的響應內(nèi)容類型(Content-Types)Accept:text/plainAccept-Charset可接受的字符集Accept-Charset:utf-8Accept-Encoding可接受的響應內(nèi)容的編碼方式Accept-Encoding:gzip,deflateAccept-Language可接受的響應內(nèi)容語言列表Accept-Language:en-USCookie由之前服務器通過Set-Cookie設置的一個HTTP協(xié)議CookieCookie:$Version=1;Skin=new;Referer設置前一個頁面的地址,并且前一個頁面中的連接指向當前請求,意思就是如果當前請求是在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é)議,客戶端與服務器建立連接并傳輸數(shù)據(jù),在數(shù)據(jù)傳輸完成后,本次的連接將會關閉,并不會留存相關記錄。服務器無法依據(jù)連接來跟蹤會話,也無法從連接上知曉用戶的歷史操作。這嚴重阻礙了基于Web應用程序的交互,也影響用戶的交互體驗。某些網(wǎng)站需要用戶登錄才進一步操作,用戶在輸入賬號密碼登錄后,才能瀏覽頁面。對于服務器而言,由于HTTP的無狀態(tài)性,服務器并不知道用戶有沒有登錄過,當用戶退出當前頁面訪問其他頁面時,又需重新再次輸入賬號及密碼。熟悉Cookie為解決HTTP的無狀態(tài)性帶來的負面作用,Cookie機制應運而生。Cookie本質(zhì)上是一段文本信息。當客戶端請求服務器時,若服務器需要記錄用戶狀態(tài),就在響應用戶請求時發(fā)送一段Cookie信息??蛻舳藶g覽器會保存該Cookie信息,當用戶再次訪問該網(wǎng)站時,瀏覽器會把Cookie做為請求信息的一部分提交給服務器。服務器對Cookie進行驗證,以此來判斷用戶狀態(tài),當且僅當該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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論