自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HTTP響應(yīng)報文與工作原理詳解

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
HTTP 是一種請求/響應(yīng)式的協(xié)議,即一個客戶端與服務(wù)器建立連接后,向服務(wù)器發(fā)送一個請求;服務(wù)器接到請求后,給予相應(yīng)的響應(yīng)信息。

超文本傳輸協(xié)議(Hypertext Transfer Protocol,簡稱HTTP)是應(yīng)用層協(xié)議。HTTP 是一種請求/響應(yīng)式的協(xié)議,即一個客戶端與服務(wù)器建立連接后,向服務(wù)器發(fā)送一個請求;服務(wù)器接到請求后,給予相應(yīng)的響應(yīng)信息。

HTTP 請求報文

HTTP 請求報文由請求行、請求頭部、空行 和 請求包體 4 個部分組成,如下圖所示: 

HTTP 請求報文由請求行、請求頭部、空行 和 請求包體 4 個部分組成

 

下面對請求報文格式進行簡單的分析:

請求行:請求行由方法字段、URL 字段 和HTTP 協(xié)議版本字段 3 個部分組成,他們之間使用空格隔開。常用的 HTTP 請求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;

● GET:當(dāng)客戶端要從服務(wù)器中讀取某個資源時,使用GET 方法。GET 方法要求服務(wù)器將URL 定位的資源放在響應(yīng)報文的數(shù)據(jù)部分,回送給客戶端,即向服務(wù)器請求某個資源。使用GET 方法時,請求參數(shù)和對應(yīng)的值附加在 URL 后面,利用一個問號(“?”)代表URL 的結(jié)尾與請求參數(shù)的開始,傳遞參數(shù)長度受限制。例如,/index.jsp?id=100&op=bind。

● POST:當(dāng)客戶端給服務(wù)器提供信息較多時可以使用POST 方法,POST 方法向服務(wù)器提交數(shù)據(jù),比如完成表單數(shù)據(jù)的提交,將數(shù)據(jù)提交給服務(wù)器處理。GET 一般用于獲取/查詢資源信息,POST 會附帶用戶數(shù)據(jù),一般用于更新資源信息。POST 方法將請求參數(shù)封裝在HTTP 請求數(shù)據(jù)中,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù);

請求頭部:請求頭部由關(guān)鍵字/值對組成,每行一對,關(guān)鍵字和值用英文冒號“:”分隔。請求頭部通知服務(wù)器有關(guān)于客戶端請求的信息,典型的請求頭有:

● User-Agent:產(chǎn)生請求的瀏覽器類型;

● Accept:客戶端可識別的響應(yīng)內(nèi)容類型列表;星號 “ * ” 用于按范圍將類型分組,用 “ */* ” 指示可接受全部類型,用“ type/* ”指示可接受 type 類型的所有子類型;

● Accept-Language:客戶端可接受的自然語言;

● Accept-Encoding:客戶端可接受的編碼壓縮格式;

● Accept-Charset:可接受的應(yīng)答的字符集;

● Host:請求的主機名,允許多個域名同處一個IP 地址,即虛擬主機;

● connection:連接方式(close 或 keepalive);

● Cookie:存儲于客戶端擴展字段,向同一域名的服務(wù)端發(fā)送屬于該域的cookie;

空行:***一個請求頭之后是一個空行,發(fā)送回車符和換行符,通知服務(wù)器以下不再有請求頭;

請求包體:請求包體不在 GET 方法中使用,而是在POST 方法中使用。POST 方法適用于需要客戶填寫表單的場合。與請求包體相關(guān)的最常使用的是包體類型 Content-Type 和包體長度 Content-Length;

HTTP 響應(yīng)報文

HTTP 響應(yīng)報文由狀態(tài)行、響應(yīng)頭部、空行 和 響應(yīng)包體 4 個部分組成,如下圖所示:

 

 

下面對響應(yīng)報文格式進行簡單的分析:

狀態(tài)行:狀態(tài)行由 HTTP 協(xié)議版本字段、狀態(tài)碼和狀態(tài)碼的描述文本 3 個部分組成,他們之間使用空格隔開;

● 狀態(tài)碼由三位數(shù)字組成,***位數(shù)字表示響應(yīng)的類型,常用的狀態(tài)碼有五大類如下所示:

1xx:表示服務(wù)器已接收了客戶端請求,客戶端可繼續(xù)發(fā)送請求;

2xx:表示服務(wù)器已成功接收到請求并進行處理;

3xx:表示服務(wù)器要求客戶端重定向;

4xx:表示客戶端的請求有非法內(nèi)容;

5xx:表示服務(wù)器未能正常處理客戶端的請求而出現(xiàn)意外錯誤;

● 狀態(tài)碼描述文本有如下取值:

200 OK:表示客戶端請求成功;

400 Bad Request:表示客戶端請求有語法錯誤,不能被服務(wù)器所理解;

401 Unauthonzed:表示請求未經(jīng)授權(quán),該狀態(tài)代碼必須與 WWW-Authenticate 報頭域一起使用;

403 Forbidden:表示服務(wù)器收到請求,但是拒絕提供服務(wù),通常會在響應(yīng)正文中給出不提供服務(wù)的原因;

404 Not Found:請求的資源不存在,例如,輸入了錯誤的URL;

500 Internal Server Error:表示服務(wù)器發(fā)生不可預(yù)期的錯誤,導(dǎo)致無法完成客戶端的請求;

503 Service Unavailable:表示服務(wù)器當(dāng)前不能夠處理客戶端的請求,在一段時間之后,服務(wù)器可能會恢復(fù)正常;#p#

響應(yīng)頭部:響應(yīng)頭可能包括:

Location:Location響應(yīng)報頭域用于重定向接受者到一個新的位置。例如:客戶端所請求的頁面已不存在原先的位置,為了讓客戶端重定向到這個頁面新的位置,服務(wù)器端可以發(fā)回Location響應(yīng)報頭后使用重定向語句,讓客戶端去訪問新的域名所對應(yīng)的服務(wù)器上的資源;

Server:Server 響應(yīng)報頭域包含了服務(wù)器用來處理請求的軟件信息及其版本。它和 User-Agent 請求報頭域是相對應(yīng)的,前者發(fā)送服務(wù)器端軟件的信息,后者發(fā)送客戶端軟件(瀏覽器)和操作系統(tǒng)的信息。

Vary:指示不可緩存的請求頭列表;

Connection:連接方式;

對于請求來說:close(告訴 WEB 服務(wù)器或者代理服務(wù)器,在完成本次請求的響應(yīng)后,斷開連接,不等待本次連接的后續(xù)請求了)。keepalive(告訴WEB服務(wù)器或者代理服務(wù)器,在完成本次請求的響應(yīng)后,保持連接,等待本次連接的后續(xù)請求);

對于響應(yīng)來說:close(連接已經(jīng)關(guān)閉); keepalive(連接保持著,在等待本次連接的后續(xù)請求); Keep-Alive:如果瀏覽器請求保持連接,則該頭部表明希望WEB 服務(wù)器保持連接多長時間(秒);例如:Keep-Alive:300;

WWW-Authenticate:WWW-Authenticate響應(yīng)報頭域必須被包含在401 (未授權(quán)的)響應(yīng)消息中,這個報頭域和前面講到的Authorization 請求報頭域是相關(guān)的,當(dāng)客戶端收到 401 響應(yīng)消息,就要決定是否請求服務(wù)器對其進行驗證。如果要求服務(wù)器對其進行驗證,就可以發(fā)送一個包含了Authorization 報頭域的請求;

空行:***一個響應(yīng)頭部之后是一個空行,發(fā)送回車符和換行符,通知服務(wù)器以下不再有響應(yīng)頭部。

響應(yīng)包體:服務(wù)器返回給客戶端的文本信息;

HTTP 工作原理

HTTP 協(xié)議采用請求/響應(yīng)模型??蛻舳讼蚍?wù)器發(fā)送一個請求報文,服務(wù)器以一個狀態(tài)作為響應(yīng)。

以下是 HTTP 請求/響應(yīng)的步驟:

● 客戶端連接到web服務(wù)器:HTTP 客戶端與web服務(wù)器建立一個 TCP 連接;

● 客戶端向服務(wù)器發(fā)起 HTTP 請求:通過已建立的TCP 連接,客戶端向服務(wù)器發(fā)送一個請求報文;

● 服務(wù)器接收 HTTP 請求并返回 HTTP 響應(yīng):服務(wù)器解析請求,定位請求資源,服務(wù)器將資源副本寫到 TCP 連接,由客戶端讀取;

● 釋放 TCP 連接:若connection 模式為close,則服務(wù)器主動關(guān)閉TCP 連接,客戶端被動關(guān)閉連接,釋放TCP 連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內(nèi)可以繼續(xù)接收請求;

● 客戶端瀏覽器解析HTML內(nèi)容:客戶端將服務(wù)器響應(yīng)的 html 文本解析并顯示;

例如:在瀏覽器地址欄鍵入URL,按下回車之后會經(jīng)歷以下流程:

1、瀏覽器向 DNS 服務(wù)器請求解析該 URL 中的域名所對應(yīng)的 IP 地址;

2、解析出 IP 地址后,根據(jù)該 IP 地址和默認端口 80,和服務(wù)器建立 TCP 連接;

3、瀏覽器發(fā)出讀取文件(URL 中域名后面部分對應(yīng)的文件)的HTTP 請求,該請求報文作為 TCP 三次握手的第三個報文的數(shù)據(jù)發(fā)送給服務(wù)器;

4、服務(wù)器對瀏覽器請求作出響應(yīng),并把對應(yīng)的 html 文本發(fā)送給瀏覽器;

5、釋放 TCP 連接;

6、瀏覽器將該 html 文本并顯示內(nèi)容;

HTTP 無狀態(tài)性

HTTP 協(xié)議是無狀態(tài)的(stateless)。也就是說,同一個客戶端第二次訪問同一個服務(wù)器上的頁面時,服務(wù)器無法知道這個客戶端曾經(jīng)訪問過,服務(wù)器也無法分辨不同的客戶端。HTTP 的無狀態(tài)特性簡化了服務(wù)器的設(shè)計,使服務(wù)器更容易支持大量并發(fā)的HTTP 請求。

HTTP 持久連接

HTTP1.0 使用的是非持久連接,主要缺點是客戶端必須為每一個待請求的對象建立并維護一個新的連接,即每請求一個文檔就要有兩倍RTT 的開銷。因為同一個頁面可能存在多個對象,所以非持久連接可能使一個頁面的下載變得十分緩慢,而且這種短連接增加了網(wǎng)絡(luò)傳輸?shù)呢摀?dān)。HTTP1.1 使用持久連接keepalive,所謂持久連接,就是服務(wù)器在發(fā)送響應(yīng)后仍然在一段時間內(nèi)保持這條連接,允許在同一個連接中存在多次數(shù)據(jù)請求和響應(yīng),即在持久連接情況下,服務(wù)器在發(fā)送完響應(yīng)后并不關(guān)閉TCP 連接,而客戶端可以通過這個連接繼續(xù)請求其他對象。

HTTP/1.1 協(xié)議的持久連接有兩種方式:

● 非流水線方式:客戶在收到前一個響應(yīng)后才能發(fā)出下一個請求;

● 流水線方式:客戶在收到 HTTP 的響應(yīng)報文之前就能接著發(fā)送新的請求報文;

***給出一個具體例子:

  1. Remote Address:116.57.254.104:80   
  2. Request URL:http://hr.tencent.com/   
  3. Request Method:GET   
  4. Status Code:200 OK   
  5.    
  6. Request Headers   
  7. GET / HTTP/1.1   
  8. Host: hr.tencent.com   
  9. Connection: keep-alive   
  10. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8   
  11. User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36   
  12. Accept-Encoding: gzip,deflate,sdch   
  13. Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4   
  14. Cookie: pgv_pvi=2098703360PHPSESSID=bc7onl0dojbsatscsfv79pds77pgv_info=ssid=s1454606128;    
  15.         pgv_pvid=926725350ts_uid=4084753309   
  16.    
  17. Response Header   
  18. HTTP/1.1 200 OK   
  19. Server: nginx   
  20. Date: Mon, 26 Jan 2015 01:09:10 GMT   
  21. Content-Type: text/html;charset=utf-8   
  22. Content-Length: 3631   
  23. Connection: keep-alive   
  24. X-Powered-By: PHP/5.3.10   
  25. Expires: Thu, 19 Nov 1981 08:52:00 GMT   
  26. Cache-Control: no-store, no-cache, must-revalidate, post-check=0pre-check=0   
  27. Pragma: no-cache   
  28. Vary: Accept-Encoding   
  29. Content-Encoding: gzip   

從請求報文可以知道:

  1. GET / HTTP/1.1   

請求方法 GET 表示一個讀取請求,將從服務(wù)器獲得網(wǎng)頁數(shù)據(jù),/表示URL 的路徑,URL 總是以/開頭,/就表示首頁,***的HTTP/1.1 指示采用的 HTTP 協(xié)議版本是 1.1;請求域名如下所示:

  1. Host: hr.tencent.com   

響應(yīng)報文如下:

  1. HTTP/1.1 200 OK   
  2. Server: nginx   

 

責(zé)任編輯:林琳 來源: CSDN博客
相關(guān)推薦

2015-10-14 14:11:45

HTTP網(wǎng)絡(luò)協(xié)議

2009-06-04 10:41:52

Struts工作原理

2022-09-20 16:06:57

Python小程序微信

2020-07-10 09:04:55

HTTPS瀏覽器網(wǎng)絡(luò)協(xié)議

2010-06-08 12:37:25

HTTP協(xié)議工作原理

2024-12-09 08:14:25

2020-05-22 09:12:46

HTTP3網(wǎng)絡(luò)協(xié)議

2009-07-09 14:01:22

JVM工作原理

2010-09-26 08:50:11

JVM工作原理

2011-03-11 09:41:17

JavaGC

2010-06-18 15:49:41

ACPId服務(wù)

2009-08-03 12:40:46

ASP.NET編程模型

2024-04-10 08:45:51

Vue 3Proxy對象監(jiān)測數(shù)據(jù)

2020-10-16 08:30:00

foreach編程語言C#

2017-05-31 14:43:57

2020-06-28 07:43:45

HTTP401HTTP403服務(wù)器

2024-10-30 10:06:51

2009-11-09 08:53:21

ASP.NET緩存

2021-09-07 06:40:25

AndroidLiveData原理

2011-05-24 10:19:39

VMware快照
點贊
收藏

51CTO技術(shù)棧公眾號