HTTP

一烦粒、HTTP工作過程

1.客戶端連接到Web服務(wù)器

一個(gè)HTTP客戶端休溶,通常是瀏覽器,與Web服務(wù)器的HTTP端口(默認(rèn)為80)建立一個(gè)TCP套接字連接扰她。

2. 發(fā)送HTTP請(qǐng)求

通過TCP套接字兽掰,客戶端向Web服務(wù)器發(fā)送一個(gè)文本的請(qǐng)求報(bào)文,一個(gè)請(qǐng)求報(bào)文由請(qǐng)求行徒役、請(qǐng)求頭部孽尽、空行和請(qǐng)求數(shù)據(jù)4部分組成。

3. 服務(wù)器接受請(qǐng)求并返回HTTP響應(yīng)

Web服務(wù)器解析請(qǐng)求廉涕,定位請(qǐng)求資源泻云。服務(wù)器將資源復(fù)本寫到TCP套接字艇拍,由客戶端讀取狐蜕。一個(gè)響應(yīng)由狀態(tài)行、響應(yīng)頭部卸夕、空行和響應(yīng)數(shù)據(jù)4部分組成层释。

4. 釋放連接TCP連接

若connection 模式為close,則服務(wù)器主動(dòng)關(guān)閉TCP連接快集,客戶端被動(dòng)關(guān)閉連接贡羔,釋放TCP連接;若connection 模式為keepalive廉白,則該連接會(huì)保持一段時(shí)間,在該時(shí)間內(nèi)可以繼續(xù)接收請(qǐng)求;

5. 客戶端瀏覽器解析HTML內(nèi)容

客戶端瀏覽器首先解析狀態(tài)行乖寒,查看表明請(qǐng)求是否成功的狀態(tài)代碼猴蹂。然后解析每一個(gè)響應(yīng)頭,響應(yīng)頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集楣嘁“跚幔客戶端瀏覽器讀取響應(yīng)數(shù)據(jù)HTML,根據(jù)HTML的語法對(duì)其進(jìn)行格式化逐虚,并在瀏覽器窗口中顯示聋溜。


二、請(qǐng)求報(bào)文(request)

HTTP協(xié)議使用TCP協(xié)議進(jìn)行傳輸叭爱,在應(yīng)用層協(xié)議發(fā)起交互之前撮躁,首先是TCP的三次握手。完成了TCP三次握手后买雾,客戶端會(huì)向服務(wù)器發(fā)出一個(gè)請(qǐng)求報(bào)文把曼。請(qǐng)求報(bào)文的格式如下圖抓包所示:


2.1注釋:

字段意義

Method:表示這次請(qǐng)求使用的是方法。常用方法有:GET/POST

URI:表示請(qǐng)求的頁(yè)面地址漓穿,圖中的“/”表示服務(wù)器的根目錄祝迂。

Version:表示http的版本。

Accept:請(qǐng)求的對(duì)象類型器净。如果是“/”表示任意類型型雳,如果是指定的類型,則會(huì)變成“type/”山害。

Accept-Language:使用的語言種類纠俭。

Accept-Encording:頁(yè)面編碼種類。

Accept-Charset:頁(yè)面字符集浪慌。例如常說的unicode冤荆,UTF-8,ANSI权纤,BIG5和GB2312都是編碼钓简。

User-Agent:提供了客戶端瀏覽器的類型和版本與操作系統(tǒng)版本。

Host:連接的目標(biāo)主機(jī)汹想,如果連接的服務(wù)器是非標(biāo)準(zhǔn)端口外邓,在這里會(huì)出現(xiàn)使用的非標(biāo)準(zhǔn)端口。

Connection:對(duì)于HTTP連接的處理古掏,keep-alive表示保持連接损话,如果是在響應(yīng)報(bào)文中發(fā)送頁(yè)面完畢就會(huì)關(guān)閉連接,狀態(tài)變?yōu)閏lose。

Content-Length:發(fā)送給HTTP服務(wù)器數(shù)據(jù)的長(zhǎng)度丧枪。即請(qǐng)求消息正文的長(zhǎng)度光涂;

x-forward-for:簡(jiǎn)稱XFF頭,代表客戶端真實(shí)IP拧烦,通過修改該值忘闻,可以進(jìn)行偽造客戶端IP。XFF注入是SWL注入的一種恋博。

2.2其中涉及到請(qǐng)求方法:

1.GET

get方法請(qǐng)求指定的頁(yè)面信息服赎,返回實(shí)體主體。該請(qǐng)求是向服務(wù)器請(qǐng)求信息交播,請(qǐng)求參數(shù)會(huì)跟在url后面重虑,因此,對(duì)傳參長(zhǎng)度有限制的秦士,而且不同瀏覽器的上限是不同的(2k, 7~8k及其他)缺厉。由于get請(qǐng)求直接將參數(shù)暴露在url中,因此對(duì)于一些帶有重要信息的請(qǐng)求可能并不完全合適(不安全)隧土。

2.POST

post請(qǐng)求是向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求提针,例如提交表單或者上傳文件等。數(shù)據(jù)被包含在請(qǐng)求體中曹傀,POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改辐脖。post方法沒有對(duì)傳遞資源的大小進(jìn)行限制,往往是取決于服務(wù)器端的接受能力皆愉,而且嗜价,該方法傳參安全性稍高些

3.PUT

PUT方法是從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。PUT方法的本質(zhì)是idempotent的方法幕庐,通過服務(wù)是否是idempotent來判斷用PUT 還是 POST更合理久锥,通常情況下這兩種方法并沒有刻意區(qū)分,根據(jù)語義使用即可

4.DELETE

請(qǐng)求服務(wù)器刪除指定的頁(yè)面异剥,DELETE請(qǐng)求一般會(huì)返回3種狀態(tài)碼:

200 (OK) - 刪除成功瑟由,同時(shí)返回已經(jīng)刪除的資源

202 (Accepted) - 刪除請(qǐng)求已經(jīng)接受,但沒有被立即執(zhí)行(資源也許已經(jīng)被轉(zhuǎn)移到了待刪除區(qū)域)

204 (No Content) - 刪除請(qǐng)求已經(jīng)被執(zhí)行冤寿,但是沒有返回資源(也許是請(qǐng)求刪除不存在的資源造成的)

5.OPTIONS

允許客戶端查看服務(wù)器的性能歹苦。(常見的是跨域預(yù)檢Preflighted Reqeusts方法會(huì)采用該方法)。一般來說督怜,開發(fā)中用到該方法是用來獲取服務(wù)器支持的請(qǐng)求類型或者查看服務(wù)器類型殴瘦,來確保接下來發(fā)送的請(qǐng)求夠安全。該請(qǐng)求方法的響應(yīng)不能緩存亮蛔。如果該URI是一個(gè)星號(hào)(“*”)痴施,OPTIONS請(qǐng)求將試圖應(yīng)用于服務(wù)器擎厢,而不是某個(gè)指定資源究流;如果該URI不是星號(hào)辣吃,則只能用來獲取該資源通信中可用的選項(xiàng)。

6.HEAD

類似于get請(qǐng)求芬探,只不過返回的響應(yīng)中沒有具體的內(nèi)容神得,用于獲取報(bào)頭

7.CONNECT

HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器

8.TRACE

回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷偷仿。


三哩簿、響應(yīng)報(bào)文(response)

當(dāng)收到get或post等方法發(fā)來的請(qǐng)求后,服務(wù)器就要對(duì)報(bào)文進(jìn)行響應(yīng)酝静。同樣节榜,響應(yīng)報(bào)文也分為兩部分。以下為抓包截圖:


3.1注釋:

字段名意義

響應(yīng)碼/狀態(tài)碼:響應(yīng)代碼是服務(wù)器根據(jù)請(qǐng)求進(jìn)行查找后得到的結(jié)果的一種反饋别智,有1xx 2xx 3xx 4xx 5xx

server:服務(wù)器軟件版本信息--即中間件宗苍。

date:標(biāo)注了當(dāng)前服務(wù)器的時(shí)間。

connection:標(biāo)明連接關(guān)閉薄榛,抓包可以發(fā)現(xiàn)在響應(yīng)返回后服務(wù)器向客戶端發(fā)出fin包單向關(guān)閉了連接讳窟。

Expires:表示在某個(gè)時(shí)間以前可以不用重新緩存該頁(yè)面

cache-control:表示對(duì)頁(yè)面是否進(jìn)行緩存。

content-type:表示了應(yīng)答請(qǐng)求后返回的內(nèi)容類型敞恋。Content還有內(nèi)容長(zhǎng)度和內(nèi)容語言以及內(nèi)容編碼三個(gè)內(nèi)容丽啡,其中內(nèi)容長(zhǎng)度只有在請(qǐng)求報(bào)文中的connection值為keep-alive時(shí)才會(huì)用到。

Cookiecookie:是一種類似緩存的機(jī)制硬猫,它保存在一個(gè)本地的文本文件中补箍,其主要作用是在發(fā)送請(qǐng)求時(shí)將cookie放在請(qǐng)求首部中發(fā)送給服務(wù)器,服務(wù)器收到cookie后查找自己已有的cookie信息啸蜜,確定客戶端的身份馏予,然后返回相應(yīng)的頁(yè)面,cookie的方便之處在于可以保持一種已登錄的狀態(tài)盔性。

set-cookie:給出了cookie的id霞丧,過期時(shí)間以及參數(shù)path,path是表示在哪個(gè)虛擬目錄路徑下的頁(yè)面可以讀取使用該cookie冕香。如果用戶在連接中通過了服務(wù)器相應(yīng)的認(rèn)證程序蛹尝,服務(wù)器會(huì)添加一個(gè)cdb_auth到set-cookie中,這個(gè)段表示了客戶端的認(rèn)證信息悉尾。

Refresh:服務(wù)器通過Refresh頭告訴瀏覽器定時(shí)刷新瀏覽器突那。

其他為響應(yīng)信息

3.2其中涉及到狀態(tài)碼:

1**:表示接收到請(qǐng)求,繼續(xù)進(jìn)程构眯,在發(fā)送post后可以收到該應(yīng)答愕难。

2**:表示請(qǐng)求的操作成功,在發(fā)送get后返回。常見200

3**:表示重發(fā)猫缭,為了完成操作必須進(jìn)一步動(dòng)作葱弟。

4**:表示客戶端出現(xiàn)錯(cuò)誤。

5**:表示服務(wù)器出現(xiàn)錯(cuò)誤猜丹。

200 OK ?????//客戶端請(qǐng)求成功

400 Bad Request ?//客戶端請(qǐng)求有語法錯(cuò)誤芝加,不能被服務(wù)器所理解

401 Unauthorized //請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用

403 Forbidden ?//服務(wù)器收到請(qǐng)求射窒,但是拒絕提供服務(wù)

404 Not Found ?//請(qǐng)求資源不存在藏杖,eg:輸入了錯(cuò)誤的URL

500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤

503 Server Unavailable ?//服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脉顿,一起剝皮案震驚了整個(gè)濱河市蝌麸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艾疟,老刑警劉巖祥楣,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異汉柒,居然都是意外死亡误褪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門碾褂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兽间,“玉大人,你說我怎么就攤上這事正塌∴致裕” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵乓诽,是天一觀的道長(zhǎng)帜羊。 經(jīng)常有香客問我,道長(zhǎng)鸠天,這世上最難降的妖魔是什么讼育? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮稠集,結(jié)果婚禮上奶段,老公的妹妹穿的比我還像新娘。我一直安慰自己剥纷,他們只是感情好痹籍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晦鞋,像睡著了一般蹲缠。 火紅的嫁衣襯著肌膚如雪棺克。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天线定,我揣著相機(jī)與錄音娜谊,去河邊找鬼。 笑死渔肩,一個(gè)胖子當(dāng)著我的面吹牛因俐,可吹牛的內(nèi)容都是我干的拇惋。 我是一名探鬼主播周偎,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼撑帖!你這毒婦竟也來了祠挫?” 一聲冷哼從身側(cè)響起匣距,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捐祠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡武翎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蛉腌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缴罗。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡助琐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出面氓,到底是詐尸還是另有隱情兵钮,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布舌界,位于F島的核電站掘譬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏呻拌。R本人自食惡果不足惜葱轩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藐握。 院中可真熱鬧酿箭,春花似錦、人聲如沸趾娃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抬闷。三九已至妇蛀,卻和暖如春耕突,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背评架。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工眷茁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纵诞。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓上祈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親浙芙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子登刺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容