成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

HTTP學(xué)習(xí)筆記。

vibiu / 3396人閱讀

摘要:當(dāng)瀏覽器接收并顯示網(wǎng)頁前,此網(wǎng)頁所在的服務(wù)器會(huì)返回一個(gè)包含狀態(tài)碼的信息頭用以響應(yīng)瀏覽器的請(qǐng)求。下面是常見的狀態(tài)碼請(qǐng)求成功。狀態(tài)碼分類狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型,后兩個(gè)數(shù)字沒有分類的作用。

HTTP簡介

HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議。
HTTP是一個(gè)基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML文件,圖片文件,查詢結(jié)果等)。

HTTP工作原理

HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)上。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端發(fā)送所有的請(qǐng)求。
Web服務(wù)器:Apache服務(wù)器,IIS服務(wù)器等。
Web服務(wù)器根據(jù)接收的請(qǐng)求后,向客戶端發(fā)送響應(yīng)信息。
HTTP默認(rèn)端口號(hào)為80,但是你也可以改為8080或者其它端口。
HTTP三點(diǎn)注意事項(xiàng):

*HTTP是無連接的:無連接的含義是限制每次連接只處理一次請(qǐng)求。服務(wù)器處理完客戶請(qǐng)求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間。
*HTTP是媒體獨(dú)立的:這意味著,只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容,任何類型的數(shù)據(jù)都可以通過HTTP發(fā)送??蛻舳艘约胺?wù)器指定使用適合的MIME-type內(nèi)容類型。
*HTTP是無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。

以下圖表展示了HTTP協(xié)議通信流程:

HTTP消息結(jié)構(gòu)

HTTP是基于客戶端/服務(wù)端的架構(gòu)模型,通過一個(gè)可靠的鏈接來交換信息,是一個(gè)無狀態(tài)的請(qǐng)求/響應(yīng)協(xié)議。
一個(gè)HTTP客戶端是一個(gè)應(yīng)用程序(Web瀏覽器或其它任何客戶端),通過連接到服務(wù)器達(dá)到向服務(wù)器發(fā)送一個(gè)或多個(gè)HTTP的請(qǐng)求的目的。
一個(gè)HTTP服務(wù)器同樣也是一個(gè)應(yīng)用程序(通常是一個(gè)Web服務(wù),如Apache Web服務(wù)器等),通過接收客戶端的請(qǐng)求并向客戶端發(fā)送HTTP響應(yīng)數(shù)據(jù)。
HTTP使用統(tǒng)一資源標(biāo)識(shí)符來傳輸數(shù)據(jù)和建立連接。一旦建立連接后,據(jù)消息就通過類似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴(kuò)展(MIME)[RFC2045]來傳送。

客戶端請(qǐng)求消息

客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器的請(qǐng)求消息包括以下格式:請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)四個(gè)部分組成。

服務(wù)器響應(yīng)信息

HTTP響應(yīng)也由四個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、空行和響應(yīng)正文。

HTTP請(qǐng)求方法

根據(jù)HTTP標(biāo)準(zhǔn),HTTP請(qǐng)求可以使用多種請(qǐng)求方法。
HTTP1.0定義了三種請(qǐng)求方法:GET,POST,和HEAD方法。
HTTP1.1新增了五種請(qǐng)求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。

HTTP響應(yīng)頭信息

HTTP請(qǐng)求頭提供了關(guān)于請(qǐng)求,響應(yīng)或者其它的發(fā)送實(shí)體的信息。

HTTP狀態(tài)碼

當(dāng)瀏覽者訪問一個(gè)網(wǎng)頁時(shí),瀏覽者的瀏覽器會(huì)向網(wǎng)頁所在服務(wù)器發(fā)出請(qǐng)求。當(dāng)瀏覽器接收并顯示網(wǎng)頁前,此網(wǎng)頁所在的服務(wù)器會(huì)返回一個(gè)包含HTTP狀態(tài)碼的信息頭用以響應(yīng)瀏覽器的請(qǐng)求。
下面是常見的HTTP狀態(tài)碼:

200:請(qǐng)求成功。
301:資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL。
404:請(qǐng)求的資源(網(wǎng)頁等)不存在。
500:內(nèi)部服務(wù)器錯(cuò)誤。
HTTP狀態(tài)碼分類

HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型,后兩個(gè)數(shù)字沒有分類的作用。HTTP狀態(tài)碼共分為5種類型:

HTTP content-type

Content-Type,內(nèi)容類型,一般是指網(wǎng)頁中存在的Content-Type,用于定義網(wǎng)絡(luò)文件的類型和王爺編碼,決定瀏覽器將以什么形式、什么編碼讀取這個(gè)文件,這就是經(jīng)??吹揭恍〢sp網(wǎng)頁點(diǎn)擊的結(jié)果卻不是下載到一個(gè)文件或一張圖片的原因。

HTTP協(xié)議:持久連接、非持久連接

定義:

非持久連接:每個(gè)連接處理一個(gè)請(qǐng)求-響應(yīng)事務(wù),每次交互都要打開關(guān)閉連接。
持久連接:每個(gè)連接可以處理多個(gè)請(qǐng)求-響應(yīng)事務(wù),第一次交互會(huì)打開連接,交互結(jié)束后連接并不關(guān)閉,下次交互就省去了建立連接的過程。
持久連接情況下,服務(wù)器發(fā)出響應(yīng)后讓TCP連接繼續(xù)打開著。同一對(duì)客戶/服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)可以通過這個(gè)連接發(fā)送。
HTTP1.0使用非持久連接。 HTTP1.1默認(rèn)使用持久連接。
持久連接的實(shí)現(xiàn)有兩種:HTTP/1.0+的keep-alive與HTTP/1.1的持久連接。

非持久連接示例:

非持久連接下,客戶端請(qǐng)求一個(gè)頁面。假設(shè)該頁面包含1個(gè)html文件和10個(gè)JPEG圖像,所有這些對(duì)象在同一臺(tái)服務(wù)器主機(jī)中。再假設(shè)該節(jié)本HTML文件的URL:www.yesky.com/sompath/index.html。
1.HTTP客戶端與服務(wù)器主機(jī)www.yesky.com中的HTTP服務(wù)器建立一個(gè)TCP連接。
2.HTTP客戶端發(fā)送HTTP請(qǐng)求消息。包含/sompath/index.html。
3.HTTP服務(wù)器接收請(qǐng)求消息,從服務(wù)器主機(jī)內(nèi)存或硬盤拿去除對(duì)象/sompath/index.html,發(fā)出該對(duì)象的響應(yīng)消息。
4.HTTP服務(wù)器告知TCP關(guān)閉這個(gè)TCP連接(TCP要等客戶收到這個(gè)響應(yīng)消息后,才會(huì)真正終止這個(gè)連接)。
5.HTTP客戶端接收響應(yīng)消息。TCP連接終止。該消息標(biāo)明所拆裝的對(duì)象是一個(gè)HTML文件??蛻羧〕鑫募治龊蟀l(fā)現(xiàn)10個(gè)JPEG對(duì)象的引用。
6.給每一個(gè)引用到的JPEG對(duì)象重復(fù)步驟1——4.
HTTP協(xié)議中TCP的三次握手和四次揮手


CLOSED:表示初始狀態(tài)。
LISTEN: 服務(wù)器端的某個(gè)SOCKET處于監(jiān)聽狀態(tài),可以接受連接了。
SYN_SENT:表示客戶端已發(fā)送 SYN 報(bào)文。
SYN_RCVD:表示服務(wù)器接受到了 SYN 報(bào)文。
ESTABLISHED:表示連接已經(jīng)建立。
ACK 確認(rèn)字段:在連接建立后所有傳送的報(bào)文段 ACK 必須為 1 。
SYN 同步字段:連接建立時(shí)使用同步序號(hào)。
FIN 終止字段:FIN = 1 是表示釋放一個(gè)連接。
序號(hào) seq :發(fā)送了多少被成功接受數(shù)據(jù)。
確認(rèn)號(hào) ack:接受了多少數(shù)據(jù)。
注意:

 ACK = 1 不攜帶數(shù)據(jù)不消耗序號(hào)。
 SYN = 1 不能攜帶數(shù)據(jù)并且要消耗一個(gè)序號(hào)。


第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。 完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù).

那么如何斷開連接呢?過程如下:(中斷連接的可以是Client端,也可以是Sever端)

FIN_WAIT_1:表示等待對(duì)方的FIN報(bào)文。當(dāng)SOCKET在ESTABLISHED狀態(tài)時(shí),它想主動(dòng)關(guān)閉連接,向?qū)Ψ桨l(fā)送了FIN報(bào)文,此時(shí)該SOCKET進(jìn)入到FIN_WAIT_1 狀態(tài)
FIN_WAIT_2:也表示等待對(duì)方的FIN報(bào)文。FIN_WAIT_2狀態(tài)下的SOCKET,表示半連接,也即有一方要求close連接,但另外還告訴對(duì)方,我暫時(shí)還有點(diǎn)數(shù)據(jù)需要傳送給你,稍后再關(guān)閉連接。
CLOSE_WAIT: 這種狀態(tài)的含義其實(shí)是表示在等待關(guān)閉。你回復(fù)一個(gè)ACK給對(duì)方,并進(jìn)入CLOSE_WAIT狀態(tài)。接下來就是查看你是否還有數(shù)據(jù)要發(fā)送給對(duì)方,如果沒有,就可以close這個(gè)socket,并發(fā)送FIN給對(duì)方,即關(guān)閉連接。
CLOSING:表示主機(jī)1給主機(jī)2發(fā)送FIN后,并沒有收到主機(jī)2回應(yīng)的ACK,而收到了主機(jī)2發(fā)送的FIN。表示雙方同時(shí)close一個(gè)socket,出現(xiàn)同時(shí)發(fā)送FIN現(xiàn)象。
LAST_ACK: 發(fā)送FIN報(bào)文后,等待對(duì)方的ACK報(bào)文,當(dāng)收到ACK報(bào)文后,進(jìn)入到CLOSED狀態(tài)。
TIME_WAIT: 表示收到了對(duì)方的FIN報(bào)文,并發(fā)送出了ACK確認(rèn),等2MSL后即可回到CLOSED可用狀態(tài)了。如果FIN_WAIT_1狀態(tài)下,收到了對(duì)方同時(shí)帶FIN標(biāo)志和ACK標(biāo)志的報(bào)文時(shí),可以直接進(jìn)入到TIME_WAIT狀態(tài)。

第一次揮手:主機(jī)1向主機(jī)2,發(fā)送FIN報(bào)文段,表示關(guān)閉數(shù)據(jù)傳送,并主機(jī)1進(jìn)入FIN_WAIT_1狀態(tài),表示沒有數(shù)據(jù)要傳輸了
第二次揮手:主機(jī)2收到FIN報(bào)文段后進(jìn)入CLOSE_WAIT狀態(tài)(被動(dòng)關(guān)閉),然后發(fā)送ACK確認(rèn),表示同意你關(guān)閉請(qǐng)求了,主機(jī)到主機(jī)的數(shù)據(jù)鏈路關(guān)閉,主機(jī)進(jìn)入FIN_WAIT_2狀態(tài)
第三次揮手:主機(jī)2等待主機(jī)1發(fā)送完數(shù)據(jù),發(fā)送FIN到主機(jī)1請(qǐng)求關(guān)閉,主機(jī)2進(jìn)入LAST_ACK狀態(tài)
第四次揮手:主機(jī)1收到主機(jī)2發(fā)送的FIN后,回復(fù)ACK確認(rèn)到主機(jī)2,主機(jī)1進(jìn)入TIME_WAIT狀態(tài)。主機(jī)2收到主機(jī)1的ACK后就關(guān)閉連接了,狀態(tài)為CLOSED。主機(jī)1等待2MSL,仍然沒有收到主機(jī)2的回復(fù),說明主機(jī)2已經(jīng)正常關(guān)閉了,主機(jī)1關(guān)閉連接。

為什么連接的時(shí)候是三次握手,關(guān)閉的時(shí)候卻是四次握手?
因?yàn)楫?dāng)Server端收到Client端的SYN連接請(qǐng)求報(bào)文后,可以直接發(fā)送SYN+ACK報(bào)文。其中ACK報(bào)文是用來應(yīng)答的,SYN報(bào)文是用來同步的。但是關(guān)閉連接時(shí),當(dāng)Server端收到FIN報(bào)文時(shí),很可能并不會(huì)立即關(guān)閉SOCKET,所以只能先回復(fù)一個(gè)ACK報(bào)文,告訴Client端,"你發(fā)的FIN報(bào)文我收到了"。只有等到我Server端所有的報(bào)文都發(fā)送完了,我才能發(fā)送FIN報(bào)文,因此不能一起發(fā)送。故需要四步握手。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102790.html

相關(guān)文章

  • 重磅 | 完備的 AI 學(xué)習(xí)路線,最詳細(xì)的資源整理!

    摘要:是你學(xué)習(xí)從入門到專家必備的學(xué)習(xí)路線和優(yōu)質(zhì)學(xué)習(xí)資源。的數(shù)學(xué)基礎(chǔ)最主要是高等數(shù)學(xué)線性代數(shù)概率論與數(shù)理統(tǒng)計(jì)三門課程,這三門課程是本科必修的。其作為機(jī)器學(xué)習(xí)的入門和進(jìn)階資料非常適合。書籍介紹深度學(xué)習(xí)通常又被稱為花書,深度學(xué)習(xí)領(lǐng)域最經(jīng)典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導(dǎo)讀】本文由知名開源平...

    荊兆峰 評(píng)論0 收藏0
  • Servlet個(gè)人學(xué)習(xí)筆記

    摘要:個(gè)人的學(xué)習(xí)筆記是的簡稱,是運(yùn)行在服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來自瀏覽器或其他客戶端的請(qǐng)求和服務(wù)器上的數(shù)據(jù)庫或應(yīng)用程序之間的中間層,就是一個(gè)類,運(yùn)行在服務(wù)器上。處理數(shù)據(jù)并生成結(jié)果。所有的文件都必須遵守這個(gè)標(biāo)準(zhǔn)。 個(gè)人的學(xué)習(xí)筆記 Servlet(Server Applet)是Java Servlet的簡稱,是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來自 Web 瀏覽器...

    bang590 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(十一)--瀏覽器工作解析(一)

    摘要:緊跟在后面的是請(qǐng)求頭,每行用冒號(hào)分隔名稱和值按下兩次回車,收到服務(wù)端回復(fù)響應(yīng)部分第一行被稱作,它也分為三個(gè)部分,協(xié)議和版本狀態(tài)碼和狀態(tài)文本。對(duì)前端來說系列的狀態(tài)碼是非常陌生的,原因是的狀態(tài)被瀏覽器庫直接處理掉了,不會(huì)讓上層應(yīng)用知曉。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要...

    paulli3 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(十一)--瀏覽器工作解析(一)

    摘要:緊跟在后面的是請(qǐng)求頭,每行用冒號(hào)分隔名稱和值按下兩次回車,收到服務(wù)端回復(fù)響應(yīng)部分第一行被稱作,它也分為三個(gè)部分,協(xié)議和版本狀態(tài)碼和狀態(tài)文本。對(duì)前端來說系列的狀態(tài)碼是非常陌生的,原因是的狀態(tài)被瀏覽器庫直接處理掉了,不會(huì)讓上層應(yīng)用知曉。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要...

    付永剛 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(十一)--瀏覽器工作解析(一)

    摘要:緊跟在后面的是請(qǐng)求頭,每行用冒號(hào)分隔名稱和值按下兩次回車,收到服務(wù)端回復(fù)響應(yīng)部分第一行被稱作,它也分為三個(gè)部分,協(xié)議和版本狀態(tài)碼和狀態(tài)文本。對(duì)前端來說系列的狀態(tài)碼是非常陌生的,原因是的狀態(tài)被瀏覽器庫直接處理掉了,不會(huì)讓上層應(yīng)用知曉。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些要...

    alighters 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<