HTTP協議-HTTP響應報文

Eline發表於2018-04-19

目前網路應用都是用TCP/IP協議進行通訊的。而在網路通訊中使用最多的web協議就是基於TCP的HTTP協議,由此可見http的重要性。

TCP協議與HTTP協議

首先我們先分別來了解一下,TCP協議和HTTP協議

TCP協議

TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線(連線導向)的、可靠的、 基於IP的傳輸層協議,是網際網路的基礎。許多應用層協議都是基於TCP構建,典型的是HTTP、SMIP等協議。

TCP在OSI模型中屬於傳輸協議。首先來看看OSI的七層模型:

HTTP協議-HTTP響應報文

HTTP協議

HTTP全稱是HyperText Transfer Protocol,即:超文字傳輸協議,從1990年開始就在WWW上廣泛應用,是現今在WWW上應用最多的協議, Http是應用層協議,當你上網瀏覽網頁的時候,瀏覽器和Web伺服器之間就會通過HTTP在Internet上進行資料的傳送和接收。

HTTP它是屬於TCP上層的協議,但是本身並無會話的特點,它是一個基於請求/響應模式的、無狀態的協議,以一問一答的方式實現服務。即我們通常所說的Request/Response。

那麼TCP與HTTP協議兩者之間究竟在網路通訊中起到什麼作用以及有什麼聯絡呢?下面我們通過 一張圖展示在瀏覽器上訪問一個網頁,各種協議在裡面起的作用就能找到答案。

HTTP協議-HTTP響應報文

HTTP請求報文

一個請求報文有以下四個部分組成:請求行(request line)訊息頭部(header)空行請求正文

如下請求報文:

POST /index.html HTTP/1.1
HOST: www.XXX.com
User-Agent: Mozilla/5.0(Windows NT 6.1;rv:15.0) Firefox/15.0

Username=admin&password=admin
複製程式碼
1. 請求行

請求行由請求方法URLHTTP協議版本3個欄位組成,它們用空格分隔。

例如:

GET /index.html HTTP/1.1
複製程式碼

HTTP協議的請求方法有:

  • GET 獲取資源
  • POST 向伺服器端傳送資料,傳輸實體主體
  • PUT 傳輸檔案
  • HEAD 獲取報文首部
  • DELETE 刪除檔案
  • OPTIONS 詢問支援的方法
  • TRACE 追蹤路徑
2. 請求頭部

請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。請求頭部通知伺服器有關於客戶端請求的資訊,

  • 通用首部(General Header)
  • 請求首部(Request Header)
  • 響應首部(Response Header)
  • 實體首部(Entity Header Fields)

如下圖:

HTTP協議-HTTP響應報文

其中典型的請求頭有:

User-Agent:產生請求的瀏覽器型別。
Accept:客戶端可識別的內容型別列表。
Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。
複製程式碼
3. 空行

最後一個請求頭之後是一個空行,傳送回車符和換行符,通知伺服器以下不再有請求頭。

4. 請求資料

請求資料不在GET方法中使用,而是在POST方法中使用。POST方法適用於需要客戶填寫表單的場合。與請求資料相關的最常使用的請求頭是Content-Type和Content-Length。

HTTP響應報文

HTTP響應也由四個部分組成,分別是:響應行響應頭空行響應體

如下響應報文所示:

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>
<body>
    <p>this is http response</p>
</body>
</html>
複製程式碼

HTTP協議-HTTP響應報文
HTTP協議-HTTP響應報文

正如你所見,在響應中唯一真正的區別在於第一行中用狀態資訊代替了請求資訊。狀態行(status line)通過提供一個狀態碼來說明所請求的資源情況。

1. 狀態行

狀態行 : HTTP-Version Status-Code Reason-Phrase CRLF

  • HTTP-Version 伺服器HTTP協議的版本
  • Status-Code 伺服器發回的響應狀態程式碼
  • Reason-Phrase 狀態程式碼的文字描述

狀態碼 :狀態碼負責表示客戶端請求的返回結果、標記伺服器端是否正常、通知出現的錯誤。狀態程式碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值

狀態碼 含義
1xx 指示資訊--表示請求已接收,繼續處理
3xx 重定向--要完成請求必須進行更進一步的操作
4xx 客戶端錯誤--請求有語法錯誤或請求無法實現
5xx 伺服器端錯誤--伺服器未能實現合法的請求
3xx 重定向--要完成請求必須進行更進一步的操作

常見狀態程式碼、狀態描述的說明如下。 200 OK:客戶端請求成功。 400 Bad Request:客戶端請求有語法錯誤,不能被伺服器所理解。 401 Unauthorized:請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用。 403 Forbidden:伺服器收到請求,但是拒絕提供服務。 404 Not Found:請求資源不存在,舉個例子:輸入了錯誤的URL。 500 Internal Server Error:伺服器發生不可預期的錯誤。 503 Server Unavailable:伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常,舉個例子:HTTP/1.1 200 OK(CRLF)。

  • 2XX 成功
狀態碼 含義
200 OK 客戶端發過來的資料被正常處理
204 Not Content 正常響應,沒有實體
206 Partial Content範圍請求,返回部分資料,響應報文中由Content-Range指定實體內容
  • 3XX 重定向功
狀態碼 含義
301 Moved Permanently 永久重定向
302 Found 臨時重定向,規範要求方法名不變,但是都會改變
303 See Other 和302類似,但必須用GET方法
304 Not Modified 狀態未改變 配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)
307 Temporary Redirect 臨時重定向,不該改變請求方法
  • 4XX 客戶端錯誤
狀態碼 含義
400 Bad Request 請求報文語法錯誤
401 unauthorized 需要認證
403 Forbidden 伺服器拒絕訪問對應的資源
404 Not Found 伺服器上無法找到資源
  • 5XX 伺服器端錯誤
狀態碼 含義
500 Internal Server Error 伺服器故障
503 Service Unavailable 伺服器處於超負載或正在停機維護

HTTP首部

  • 通用首部欄位
首部欄位名 說明
Cache-Control 控制快取行為
Connection 連結的管理
Date 報文日期
Pragma 報文指令
Trailer 報文尾部的首部
Trasfer-Encoding 指定報文主體的傳輸編碼方式
Upgrade 升級為其他協議
Via 代理伺服器資訊
Warning 錯誤通知
  • 請求首部欄位
首部欄位名 說明
Accept 使用者代理可處理的媒體型別
Accept-Charset 優先的字符集
Accept-Encoding Accept-Encoding
Accept-Langulage 優先的語言
Authorization Web認證資訊
Expect 期待伺服器的特定行為
From 使用者的電子郵箱地址
Host 請求資源所在的伺服器
If-Match 比較實體標記
If-Modified-Since 比較資源的更新時間
If-None-Match 比較實體標記
If-Range 資源未更新時傳送實體Byte的範圍請求
If-Unmodified-Since 比較資源的更新時間(和If-Modified-Since相反)
Max-Forwards 最大傳輸跳數
Proxy-Authorization 代理伺服器需要客戶端認證
Range 實體位元組範圍請求
Referer 請求中的URI的原始獲取方
TE 傳輸編碼的優先順序
User-Agent HTTP客戶端程式的資訊

相關文章