Java開發(fā)工程師系列講解之——『http協(xié)議篇』
時(shí)間:2023-06-24 10:15:01 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2023-06-24 10:15:01 來源:網(wǎng)站運(yùn)營
Java開發(fā)工程師系列講解之——『http協(xié)議篇』:作為一個(gè)軟件開發(fā)的程序員,那么你肯定知道網(wǎng)絡(luò)的三大劍客:
IP地址、端口號、協(xié)議。簡單介紹下這三位:
- IP地址:每個(gè)設(shè)備在網(wǎng)絡(luò)中的唯一標(biāo)識;每臺(tái)網(wǎng)絡(luò)終端在網(wǎng)絡(luò)中都有一個(gè)獨(dú)立的地址,我們在網(wǎng)絡(luò)中傳輸數(shù)據(jù)就是使用這個(gè)地址。
- 端口號:每個(gè)程序在設(shè)備上的唯一標(biāo)識,每個(gè)網(wǎng)絡(luò)程序都需要綁定一個(gè)端口號,端口號范圍從0~65535,編寫網(wǎng)絡(luò)應(yīng)用就需要綁定一個(gè)端口號,盡量使用1024以上的,1024以下的基本上都被系統(tǒng)程序占用了。例如:mysql的端口號是3306、tomcat的端口號是8080等。
- 協(xié)議:協(xié)議是為計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或約定的集合。目前世界上最為廣泛的協(xié)議還是OSI模型衍生出來的TCP/IP協(xié)議族。
如圖所示:
我們經(jīng)常接觸到的應(yīng)用基本上都是處于上面的層,即傳輸層和應(yīng)用層;
傳輸層協(xié)議主要為TCP、UDP協(xié)議,目前主要應(yīng)用于即時(shí)通訊,例如:QQ、微信、直播、消息推送等。
應(yīng)用層協(xié)議主要由做普通應(yīng)用和網(wǎng)站的協(xié)議http和https,郵件協(xié)議SMTP等。這篇文章我們就來介紹下我們做應(yīng)用基本上必須接觸的http協(xié)議。
HTTP,超文本傳輸協(xié)議(HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。它是一個(gè)簡單的請求-響應(yīng)協(xié)議,它通常運(yùn)行在TCP之上。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。所有的WWW文件傳輸都都必須遵守這個(gè)標(biāo)準(zhǔn)。
HTTP是一個(gè)應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡單、快速、靈活等特點(diǎn)特別適用于分布式超媒體信息系統(tǒng)。
簡單快速:客戶向服務(wù)器請求服務(wù)時(shí),只需傳送請求方法和路徑。請求方法常用的有GET、POST。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于HTTP協(xié)議簡單,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快。
靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象。傳輸?shù)念愋陀蒀ontent-Type決定。
無連接:無連接的含義是限制每次連接只處理一個(gè)請求。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間。
無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要之前信息時(shí)它的應(yīng)答就較快。
支持B/S和C/S模式。Http協(xié)議由Http請求和Http響應(yīng)組成,當(dāng)在瀏覽器中輸入網(wǎng)址訪問某個(gè)網(wǎng)站時(shí),你的瀏覽器會(huì)將你的請求封裝成一個(gè)Http請求發(fā)送給服務(wù)器站點(diǎn),服務(wù)器接收到請求后會(huì)組織響應(yīng)數(shù)據(jù)封裝成一個(gè)Http響應(yīng)返回給瀏覽器。即沒有請求就沒有響應(yīng)。
HTTP請求由
請求行、請求頭和請求體三部分組成;
我們寫一個(gè)form.html的表單頁面,如圖:
點(diǎn)擊提交按鈕,抓包如圖:
① 請求行請求行主要包括了請求的方法、請求的資源、協(xié)議版本等信息;這里主要我們來看看請求方法;
http請求的方法有多種,其中最常用的就是get和post請求了。
Get和POST請求的區(qū)別首先說明下get和post請求底層都是TCP連接,所以本質(zhì)一樣,但是由于 HTTP 的規(guī)定以及瀏覽器/服務(wù)器的限制導(dǎo)致它們在應(yīng)用過程中有所不同:
- get請求的參數(shù)是拼接在url上,而post請求是通過request body發(fā)送
- get請求數(shù)據(jù)的大小會(huì)受到url地址長度的限制而限制,而post請求沒有限制
- get請求會(huì)被瀏覽器緩存下來,如果下次傳輸數(shù)據(jù)相同則返回緩存中的內(nèi)容已達(dá)到更快的展示數(shù)據(jù),而post請求則不會(huì)
- 根據(jù) HTTP 規(guī)范,GET 用于信息獲取,POST 方法則用于修改服務(wù)器上的資源
- GET 方法只產(chǎn)生一個(gè) TCP 數(shù)據(jù)包,瀏覽器會(huì)把請求頭和請求數(shù)據(jù)一并發(fā)送出去,POST 方法會(huì)產(chǎn)生兩個(gè) TCP 數(shù)據(jù)包,瀏覽器會(huì)先將請求頭發(fā)送給服務(wù)器,待服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送請求數(shù)據(jù)
② 請求頭請求頭是客戶端發(fā)送給服務(wù)器端的一些信息,服務(wù)器端就可以通過請求的各種信息完成指定的操作,請求頭中的信息使用鍵值對的方式表示。
③ 請求體請求體就是我們發(fā)送請求傳遞的數(shù)據(jù)。
如果是get請求那么數(shù)據(jù)會(huì)拼接在url地址后面,如:
http://localhost:8080...?username=zhangsan&password=123
參數(shù)傳遞格式為:key=value & key2=value2 ...
如果是Post請求的話,url地址上是看不到的,但是在“檢查”模式下是可以看到的。
HTTP響應(yīng)指的是我們請求服務(wù)器之后,服務(wù)器返回的內(nèi)容,主要由
響應(yīng)行、響應(yīng)頭、響應(yīng)體組成;
① 響應(yīng)行響應(yīng)行中最主要的信息就是響應(yīng)碼了,通過響應(yīng)碼我們可以知道請求是成功了還是失敗了以及其他情況。
常用狀態(tài)碼如下:
② 響應(yīng)頭響應(yīng)頭也都是鍵值對形式,服務(wù)器端將信息以鍵值對的形式返回給客戶端。
③ 響應(yīng)體響應(yīng)體是服務(wù)器回寫給客戶端的頁面正文,瀏覽器將正文加載到內(nèi)存,然后解析渲染顯示頁面內(nèi)容。通常響應(yīng)體的內(nèi)容格式為網(wǎng)頁或者JSON格式,如圖所示。
后面的文章我們將介紹下https協(xié)議的不同非凡之處。
【未完待續(xù)...】
關(guān)鍵詞:協(xié)議,講解,系列,工程師