3.1 HTTP請(qǐng)求
跟蹤了新浪的首頁(yè),我們來(lái)總結(jié)一下HTTP請(qǐng)求的流程:
3.1.1 步驟1:瀏覽器首先向服務(wù)器發(fā)送HTTP請(qǐng)求锨阿,請(qǐng)求包括:
方法:GET還是POST,GET僅請(qǐng)求資源,POST會(huì)附帶用戶數(shù)據(jù)吴叶;
路徑:/full/url/path;
域名:由Host頭指定:Host: www.sina.com
以及其他相關(guān)的Header序臂;
如果是POST蚌卤,那么請(qǐng)求還包括一個(gè)Body,包含用戶數(shù)據(jù)
3.1.1 步驟2:服務(wù)器向?yàn)g覽器返回HTTP響應(yīng)奥秆,響應(yīng)包括:
響應(yīng)代碼:200表示成功逊彭,3xx表示重定向,4xx表示客戶端發(fā)送的請(qǐng)求有錯(cuò)誤构订,5xx表示服務(wù)器端處理時(shí)發(fā)生了錯(cuò)誤侮叮;
響應(yīng)類型:由Content-Type指定;
以及其他相關(guān)的Header悼瘾;
通常服務(wù)器的HTTP響應(yīng)會(huì)攜帶內(nèi)容囊榜,也就是有一個(gè)Body审胸,包含響應(yīng)的內(nèi)容,網(wǎng)頁(yè)的HTML源碼就在Body中卸勺。
3.1.1 步驟3:如果瀏覽器還需要繼續(xù)向服務(wù)器請(qǐng)求其他資源砂沛,比如圖片,就再次發(fā)出HTTP請(qǐng)求孔庭,重復(fù)步驟1尺上、2。
Web采用的HTTP協(xié)議采用了非常簡(jiǎn)單的請(qǐng)求-響應(yīng)模式圆到,從而大大簡(jiǎn)化了開(kāi)發(fā)怎抛。當(dāng)我們編寫一個(gè)頁(yè)面時(shí),我們只需要在HTTP請(qǐng)求中把HTML發(fā)送出去芽淡,不需要考慮如何附帶圖片马绝、視頻等,瀏覽器如果需要請(qǐng)求圖片和視頻挣菲,它會(huì)發(fā)送另一個(gè)HTTP請(qǐng)求富稻,因此,一個(gè)HTTP請(qǐng)求只處理一個(gè)資源(此時(shí)就可以理解為TCP協(xié)議中的短連接白胀,每個(gè)鏈接只獲取一個(gè)資源椭赋,如需要多個(gè)就需要建立多個(gè)鏈接)
HTTP響應(yīng)如果包含body,也是通過(guò)\r\n\r\n來(lái)分隔的或杠。
請(qǐng)?jiān)俅巫⒁饽恼珺ody的數(shù)據(jù)類型由Content-Type頭來(lái)確定,如果是網(wǎng)頁(yè)向抢,Body就是文本认境,如果是圖片,Body就是圖片的二進(jìn)制數(shù)據(jù)挟鸠。
當(dāng)存在Content-Encoding時(shí)叉信,Body數(shù)據(jù)是被壓縮的,最常見(jiàn)的壓縮方式是gzip艘希,所以硼身,看到Content-Encoding: gzip時(shí),需要將Body數(shù)據(jù)先解壓縮覆享,才能得到真正的數(shù)據(jù)鸠姨。壓縮的目的在于減少Body的大小,加快網(wǎng)絡(luò)傳輸淹真。
最簡(jiǎn)單的理解
一:建立TCP連接:三次握手協(xié)議
客戶端:我要對(duì)你講話,你能聽(tīng)到嗎连茧;
服務(wù)端:我能聽(tīng)到核蘸;而且我也要對(duì)你講話巍糯,你能聽(tīng)到嗎;
客戶端:我也能聽(tīng)到客扎。
…….
互相開(kāi)始通話
…….. ? ?
二:關(guān)閉TCP連接:四次握手協(xié)議
客戶端:我說(shuō)完了祟峦,我要閉嘴了;
服務(wù)端:我收到請(qǐng)求徙鱼,我要閉耳朵了宅楞;
(客戶端收到這個(gè)確認(rèn),于是安心地閉嘴了袱吆。)
…….
? ? 服務(wù)端還沒(méi)傾訴完自己的故事厌衙,于是繼續(xù)嘮嘮叨叨向客戶端說(shuō)了半天,直到說(shuō)完為止
…….
服務(wù)端:我說(shuō)完了绞绒,我也要閉嘴了婶希;
客戶端:我收到請(qǐng)求,我要閉耳朵了蓬衡;(事實(shí)上喻杈,客戶端為了保證這個(gè)確認(rèn)包成功送達(dá),等待了兩個(gè)最大報(bào)文生命周期后狰晚,才閉上耳朵筒饰。)
(服務(wù)端收到這個(gè)確認(rèn),于是安心地閉嘴了壁晒。)