協(xié)議這個詞好高端的感覺,說白了就是計算機笨,不知道怎么斷句,而協(xié)議就是告訴計算機怎么斷句來獲取對應(yīng)的數(shù)據(jù).
既然是協(xié)議就是雙發(fā)的交互,請求方按照格式填寫信息,給與合理的斷句,例如空格 回車等,接收方按照空格 或回車來進行斷句,以此來接收數(shù)據(jù),雙方達成的一種默契,所以起個高端名詞-------協(xié)議.
Http協(xié)議(Hypertext Transfer Protocol,超文本傳輸協(xié)議)
瀏覽器和服務(wù)器之間交流的協(xié)議,是應(yīng)用層協(xié)議,說道應(yīng)用層就要談到OSI七層協(xié)議,搞網(wǎng)絡(luò)的要明確著七層協(xié)議,作為開發(fā)知道四層就可以了,上三層合并為應(yīng)用層,最下兩層合并為物理鏈路層.
應(yīng)用層 傳輸層 網(wǎng)絡(luò)層 物理鏈路層,越往上越靠近用于,越往下越靠近硬件.
Socket編程:編程者不需要和下層的傳輸層,網(wǎng)絡(luò)層等打交道,我們面向socket編程就可以了,其他交給socket來.
Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。
對于實際python編程來講,socket就是一個模塊,學(xué)會socket模塊就可以實現(xiàn)網(wǎng)絡(luò)通信了.
這里主講http協(xié)議,關(guān)于網(wǎng)絡(luò)編程,跳轉(zhuǎn)網(wǎng)絡(luò)編程,既然有了TCP和UDP就可以完成網(wǎng)絡(luò)通信,為什么還需要Http協(xié)議呢?
作為web應(yīng)用用戶訪問量會很大,如果來一個建立一個連接,那么連接數(shù)很快就占滿了,其他的用戶進不來,而已經(jīng)建立完連接的,可能只是查看一下價格就完事了,但是還是占著連接,為了性能和用戶體驗,出現(xiàn)了http協(xié)議,最主要的特點就是無狀態(tài)協(xié)議,
主要是:1.基于TCP協(xié)議與服務(wù)器建立連接之后發(fā)送請求,然后得到響應(yīng)之后
2:服務(wù)器端立馬斷掉了連接 釋放資源,只是發(fā)送一個cookie給你的瀏覽器,瀏覽器會記錄這個cookie,server端用cookie作為key,session作為value只保存你的會話信息,常用在需要用戶名密碼登錄的場景,當你發(fā)送其他請求的時候,request會攜帶上這個cookie,服務(wù)器看到這個cookie是否在服務(wù)器存在,如果存在把session響應(yīng)給你,如果沒有你需要重新登錄賬戶密碼才能繼續(xù)才做.
3:最重要的就是,http協(xié)議是無狀態(tài)協(xié)議,服務(wù)器不知道客戶端干了什么.
工具:firefox Chrome瀏覽器的抓包調(diào)試工具.前者中文,后者英文.
http協(xié)議,最主要的是http的請求和響應(yīng)
首先看看http請求消息(就是瀏覽器丟給服務(wù)器的):
一個完整的http請求消息,包含一個請求行,若干個消息頭(請求頭),換行,請求體(里面放著post方式請求的數(shù)據(jù))
請求行:描述客戶端的請求方式、請求資源的名稱、http協(xié)議的版本號。 例如: GET/BOOK/JAVA.HTML HTTP/1.1
請求頭(消息頭)包含(客戶機請求的服務(wù)器主機名,客戶機的環(huán)境信息等):
Accept:用于告訴服務(wù)器,客戶機支持的數(shù)據(jù)類型 (例如:Accept:text/html,image/*)
Accept-Charset:用于告訴服務(wù)器,客戶機采用的編碼格式
Accept-Encoding:用于告訴服務(wù)器,客戶機支持的數(shù)據(jù)壓縮格式
Accept-Language:客戶機語言環(huán)境
Host:客戶機通過這個服務(wù)器,想訪問的主機名
If-Modified-Since:客戶機通過這個頭告訴服務(wù)器,資源的緩存時間
Referer:客戶機通過這個頭告訴服務(wù)器,它(客戶端)是從哪個資源來訪問服務(wù)器的(防盜鏈)
User-Agent:客戶機通過這個頭告訴服務(wù)器,客戶機的軟件環(huán)境(操作系統(tǒng),瀏覽器版本等)
Cookie:客戶機通過這個頭,將Coockie信息帶給服務(wù)器
Connection:告訴服務(wù)器,請求完成后,是否保持連接
Date:告訴服務(wù)器,當前請求的時間
空白行
請求體:
就是指瀏覽器端通過http協(xié)議發(fā)送給服務(wù)器的實體數(shù)據(jù)。例如:name=dylan&id=110
(get請求時,通過url傳給服務(wù)器的值。post請求時,通過表單發(fā)送給服務(wù)器的值)
再看看HTTP響應(yīng)消息(服務(wù)器返回給瀏覽器的):
空白行
響應(yīng)體:響應(yīng)包含瀏覽器能夠解析的靜態(tài)內(nèi)容,例如:html,純文本,圖片等等信息
以上是http請求消息和響應(yīng)消息的大體介紹,具體的應(yīng)用放到爬蟲里.
HTTP協(xié)議采用請求/響應(yīng)模式,客戶端向服務(wù)器發(fā)送一個請求報文,然后服務(wù)器響應(yīng)請求。下面介紹一下一次HTTP請求的過程:
在瀏覽器中輸入URL,并按下回車鍵
瀏覽器向DNS服務(wù)器請求解析該URL中的域名對應(yīng)的IP地址(如果是IP請求,則不需要該步驟)
解析出IP后,根據(jù)IP和端口號,和服務(wù)器建立TCP連接
瀏覽器向服務(wù)器發(fā)送請求,該請求報文作為TCP三次握手的第三個報文發(fā)送給服務(wù)器
服務(wù)器做出響應(yīng),把數(shù)據(jù)發(fā)送給瀏覽器
通信完成,斷開TCP連接
瀏覽器解析收到的數(shù)據(jù)并顯示
web的本質(zhì)都是上面這一套,主要就是請求響應(yīng),無論什么語言開發(fā)的web應(yīng)用
HTTPS是安全的HTTP通道,即在HTTP通信中加入了SSL層(當前版本是TLS1.2),通信的數(shù)據(jù)被加密了,防止被竊取,具體的通信流程如下
HTTPS使用的加密方式結(jié)合了對稱加密和不對稱加密的特點,在保證安全的情況下,又提高了傳輸效率。HTTP和HTTPS的區(qū)別如下:
1.https協(xié)議需要到ca申請證書,一般免費證書很少,需要交費。
2.http的信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議。
3.http和https用的端口不一樣,前者是80,后者是443。
4.http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL HTTP協(xié)議構(gòu)建的可進行加密傳輸、身份認證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全.
來源:https://www.icode9.com/content-4-498751.html