摘要:當瀏覽器接收并顯示網頁前,此網頁所在的服務器會返回一個包含狀態碼的信息頭用以響應瀏覽器的請求。下面是常見的狀態碼請求成功。狀態碼分類狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,后兩個數字沒有分類的作用。
HTTP簡介
HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于從萬維網服務器傳輸超文本到本地瀏覽器的傳輸協議。
HTTP是一個基于TCP/IP通信協議來傳遞數據(HTML文件,圖片文件,查詢結果等)。
HTTP協議工作于客戶端-服務端架構上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端發送所有的請求。
Web服務器:Apache服務器,IIS服務器等。
Web服務器根據接收的請求后,向客戶端發送響應信息。
HTTP默認端口號為80,但是你也可以改為8080或者其它端口。
HTTP三點注意事項:
*HTTP是無連接的:無連接的含義是限制每次連接只處理一次請求。服務器處理完客戶請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。 *HTTP是媒體獨立的:這意味著,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據都可以通過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。 *HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
以下圖表展示了HTTP協議通信流程:
HTTP是基于客戶端/服務端的架構模型,通過一個可靠的鏈接來交換信息,是一個無狀態的請求/響應協議。
一個HTTP客戶端是一個應用程序(Web瀏覽器或其它任何客戶端),通過連接到服務器達到向服務器發送一個或多個HTTP的請求的目的。
一個HTTP服務器同樣也是一個應用程序(通常是一個Web服務,如Apache Web服務器等),通過接收客戶端的請求并向客戶端發送HTTP響應數據。
HTTP使用統一資源標識符來傳輸數據和建立連接。一旦建立連接后,據消息就通過類似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。
客戶端發送一個HTTP請求到服務器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成。
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
根據HTTP標準,HTTP請求可以使用多種請求方法。
HTTP1.0定義了三種請求方法:GET,POST,和HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
HTTP請求頭提供了關于請求,響應或者其它的發送實體的信息。
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收并顯示網頁前,此網頁所在的服務器會返回一個包含HTTP狀態碼的信息頭用以響應瀏覽器的請求。
下面是常見的HTTP狀態碼:
200:請求成功。 301:資源(網頁等)被永久轉移到其它URL。 404:請求的資源(網頁等)不存在。 500:內部服務器錯誤。HTTP狀態碼分類
HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,后兩個數字沒有分類的作用。HTTP狀態碼共分為5種類型:
Content-Type,內容類型,一般是指網頁中存在的Content-Type,用于定義網絡文件的類型和王爺編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件,這就是經常看到一些Asp網頁點擊的結果卻不是下載到一個文件或一張圖片的原因。
HTTP協議:持久連接、非持久連接定義:
非持久連接:每個連接處理一個請求-響應事務,每次交互都要打開關閉連接。 持久連接:每個連接可以處理多個請求-響應事務,第一次交互會打開連接,交互結束后連接并不關閉,下次交互就省去了建立連接的過程。 持久連接情況下,服務器發出響應后讓TCP連接繼續打開著。同一對客戶/服務器之間的后續請求和響應可以通過這個連接發送。 HTTP1.0使用非持久連接。 HTTP1.1默認使用持久連接。 持久連接的實現有兩種:HTTP/1.0+的keep-alive與HTTP/1.1的持久連接。
非持久連接示例:
非持久連接下,客戶端請求一個頁面。假設該頁面包含1個html文件和10個JPEG圖像,所有這些對象在同一臺服務器主機中。再假設該節本HTML文件的URL:www.yesky.com/sompath/index.html。 1.HTTP客戶端與服務器主機www.yesky.com中的HTTP服務器建立一個TCP連接。 2.HTTP客戶端發送HTTP請求消息。包含/sompath/index.html。 3.HTTP服務器接收請求消息,從服務器主機內存或硬盤拿去除對象/sompath/index.html,發出該對象的響應消息。 4.HTTP服務器告知TCP關閉這個TCP連接(TCP要等客戶收到這個響應消息后,才會真正終止這個連接)。 5.HTTP客戶端接收響應消息。TCP連接終止。該消息標明所拆裝的對象是一個HTML文件。客戶取出文件,分析后發現10個JPEG對象的引用。 6.給每一個引用到的JPEG對象重復步驟1——4.HTTP協議中TCP的三次握手和四次揮手
CLOSED:表示初始狀態。
LISTEN: 服務器端的某個SOCKET處于監聽狀態,可以接受連接了。
SYN_SENT:表示客戶端已發送 SYN 報文。
SYN_RCVD:表示服務器接受到了 SYN 報文。
ESTABLISHED:表示連接已經建立。
ACK 確認字段:在連接建立后所有傳送的報文段 ACK 必須為 1 。
SYN 同步字段:連接建立時使用同步序號。
FIN 終止字段:FIN = 1 是表示釋放一個連接。
序號 seq :發送了多少被成功接受數據。
確認號 ack:接受了多少數據。
注意:
ACK = 1 不攜帶數據不消耗序號。 SYN = 1 不能攜帶數據并且要消耗一個序號。
第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,并進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。 完成三次握手,客戶端與服務器開始傳送數據.
那么如何斷開連接呢?過程如下:(中斷連接的可以是Client端,也可以是Sever端)
FIN_WAIT_1:表示等待對方的FIN報文。當SOCKET在ESTABLISHED狀態時,它想主動關閉連接,向對方發送了FIN報文,此時該SOCKET進入到FIN_WAIT_1 狀態
FIN_WAIT_2:也表示等待對方的FIN報文。FIN_WAIT_2狀態下的SOCKET,表示半連接,也即有一方要求close連接,但另外還告訴對方,我暫時還有點數據需要傳送給你,稍后再關閉連接。
CLOSE_WAIT: 這種狀態的含義其實是表示在等待關閉。你回復一個ACK給對方,并進入CLOSE_WAIT狀態。接下來就是查看你是否還有數據要發送給對方,如果沒有,就可以close這個socket,并發送FIN給對方,即關閉連接。
CLOSING:表示主機1給主機2發送FIN后,并沒有收到主機2回應的ACK,而收到了主機2發送的FIN。表示雙方同時close一個socket,出現同時發送FIN現象。
LAST_ACK: 發送FIN報文后,等待對方的ACK報文,當收到ACK報文后,進入到CLOSED狀態。
TIME_WAIT: 表示收到了對方的FIN報文,并發送出了ACK確認,等2MSL后即可回到CLOSED可用狀態了。如果FIN_WAIT_1狀態下,收到了對方同時帶FIN標志和ACK標志的報文時,可以直接進入到TIME_WAIT狀態。
第一次揮手:主機1向主機2,發送FIN報文段,表示關閉數據傳送,并主機1進入FIN_WAIT_1狀態,表示沒有數據要傳輸了
第二次揮手:主機2收到FIN報文段后進入CLOSE_WAIT狀態(被動關閉),然后發送ACK確認,表示同意你關閉請求了,主機到主機的數據鏈路關閉,主機進入FIN_WAIT_2狀態
第三次揮手:主機2等待主機1發送完數據,發送FIN到主機1請求關閉,主機2進入LAST_ACK狀態
第四次揮手:主機1收到主機2發送的FIN后,回復ACK確認到主機2,主機1進入TIME_WAIT狀態。主機2收到主機1的ACK后就關閉連接了,狀態為CLOSED。主機1等待2MSL,仍然沒有收到主機2的回復,說明主機2已經正常關閉了,主機1關閉連接。
為什么連接的時候是三次握手,關閉的時候卻是四次握手?
因為當Server端收到Client端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能并不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,"你發的FIN報文我收到了"。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102790.html
摘要:是你學習從入門到專家必備的學習路線和優質學習資源。的數學基礎最主要是高等數學線性代數概率論與數理統計三門課程,這三門課程是本科必修的。其作為機器學習的入門和進階資料非常適合。書籍介紹深度學習通常又被稱為花書,深度學習領域最經典的暢銷書。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【導讀】本文由知名開源平...
摘要:個人的學習筆記是的簡稱,是運行在服務器或應用服務器上的程序,它是作為來自瀏覽器或其他客戶端的請求和服務器上的數據庫或應用程序之間的中間層,就是一個類,運行在服務器上。處理數據并生成結果。所有的文件都必須遵守這個標準。 個人的學習筆記 Servlet(Server Applet)是Java Servlet的簡稱,是運行在 Web 服務器或應用服務器上的程序,它是作為來自 Web 瀏覽器...
摘要:緊跟在后面的是請求頭,每行用冒號分隔名稱和值按下兩次回車,收到服務端回復響應部分第一行被稱作,它也分為三個部分,協議和版本狀態碼和狀態文本。對前端來說系列的狀態碼是非常陌生的,原因是的狀態被瀏覽器庫直接處理掉了,不會讓上層應用知曉。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要...
摘要:緊跟在后面的是請求頭,每行用冒號分隔名稱和值按下兩次回車,收到服務端回復響應部分第一行被稱作,它也分為三個部分,協議和版本狀態碼和狀態文本。對前端來說系列的狀態碼是非常陌生的,原因是的狀態被瀏覽器庫直接處理掉了,不會讓上層應用知曉。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要...
摘要:緊跟在后面的是請求頭,每行用冒號分隔名稱和值按下兩次回車,收到服務端回復響應部分第一行被稱作,它也分為三個部分,協議和版本狀態碼和狀態文本。對前端來說系列的狀態碼是非常陌生的,原因是的狀態被瀏覽器庫直接處理掉了,不會讓上層應用知曉。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要...
閱讀 1130·2021-11-24 10:21
閱讀 2568·2021-11-19 11:35
閱讀 1667·2019-08-30 15:55
閱讀 1297·2019-08-30 15:54
閱讀 1197·2019-08-30 15:53
閱讀 3508·2019-08-29 17:21
閱讀 3312·2019-08-29 16:12
閱讀 3417·2019-08-29 15:23