每週分享之 二 http協議(2)

本次分享http協議,共分爲三部分,這是第二部分,主要講解請求與響應的字段,以及狀態碼。html

以http/1.1版本的一個完整的請求與響應做爲例子nginx

 

http請求信息由三部分組成json

一、請求方法(GET/POST)、URI、協議/版本瀏覽器

二、請求頭(Request Header)緩存

三、請求正文服務器

  eg:app

    GET /form.html HTTP/1.1 (CRLF)
    Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-      powerpoint,application/msword,*/* (CRLF)
    Accept-Language:zh-cn (CRLF)
    Accept-Encoding:gzip,deflate (CRLF)
    If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
    If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
    User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
    Host:www.guet.edu.cn (CRLF)
    Connection:Keep-Alive (CRLF)
    (CRLF)
編碼

  第一行分別爲  請求方法GET  URL:form.html  協議版本:HTTP/1.1url

  第二行    Accept:聲明能夠接收哪些數據格式spa

  第三行    Accept-Language:聲明能夠支持什麼語言

  第四行    Accept-Encoding:聲明支持的編碼格式

  第五行    If-Modified-Since:聲明該文件的最後修改時間

  第六行    If-None-Match:用來判斷當前請求的資源是否改變

  第七行    User-Agent:用戶代理,存儲一些瀏覽器信息以及系統信息

  第八行    Host:請求資源所在的服務器

  第八行    Connection:聲明是持久鏈接

  CRLF     回車換行

--------------------------------------------------------------------------------------------------------------------------------------

這裏是經常使用的請求字段解釋

  Accept                        用戶代理可處理的媒體類型

  Accept-Charset              優先的字符集

  Accept-Encoding            優先的內容編碼

  Accept-Language            優先的語言(天然語言)

  Authorization                Web認證信息

  Expect                        期待服務器的特定行爲

  From                          用戶的電子郵箱地址

  Host                          請求資源所在服務器

  If-Match                      比較實體標記(ETag)

  If-Modified-Since            比較資源的更新時間

  If-None-Match                比較實體標記(與 If-Match 相反)

  If-Range                      資源未更新時發送實體 Byte 的範圍請求

  If-Unmodified-Since        比較資源的更新時間(與If-Modified-Since相反)

  Max-Forwards                 最大傳輸逐跳數

  Proxy-Authorization        代理服務器要求客戶端的認證信息

  Range                         實體的字節範圍請求

  Referer                       對請求中 URI 的原始獲取方

  TE                            傳輸編碼的優先級

  User-Agent                    HTTP 客戶端程序的信息

 

HTTP應答與HTTP請求類似,HTTP響應也由3個部分構成,分別是:

 

  一、狀態行

 

  二、響應頭(Response Header)

 

  三、響應正文

eg:

  HTTP/1.1 200 OK   
  Server: nginx
  Date: Tue, 31 May 2016 02:09:24 GMT
  Content-Type: application/json;charset=UTF-8
  Connection: keep-alive
  Vary: Accept-Encoding
  Access-Control-Allow-Origin: *
  Access-Control-Allow-Headers: X-Requested-With,access_token,access-token,content-type,multipart/form-data,application/x-www-form- urlencoded
  Access-Control-Allow-Methods: GET,POST,OPTIONS
  Content-Length: 49

  {"resultCode":1,"resultMsg":"手機號未註冊"}

 

 

  第一行:  協議版本http/1.1  狀態碼 200  狀態描述   OK

  第二行:  告知客戶端當前服務器上安裝的http服務器應用程序的信息。其中包含軟件應用名稱,甚至版本號和安裝時的啓動項

  第三行:  響應時間

  第四行:  實體主體的媒體類型

  第五行:  聲明長鏈接

  第六行:  控制緩存的管理信息

  第七行:  聲明容許任何

   第八行:  聲明容許任何人訪問

  第九行:  設置容許訪問的請求方法

  第十行:  指明正文長度

  空行:   代表響應頭結束

  響應正文

----------------------------------------------------------------------------------------------------------------------------------------

下面是一些常見的響應字段

  Accept-Ranges                 是否接受字節範圍請求
  Age                               推算資源建立通過時間
  ETag                              資源的匹配信息
  Location                          令客戶端重定向至指定URI
  Proxy-Authenticate           代理服務器對客戶端的認證信息
  Retry-After                     對再次發起請求的時機要求
  Server HTTP                     服務器的安裝信息
  Vary                              代理服務器緩存的管理信息
  WWW-Authenticate            服務器對客戶端的認證信息

  Allow                             資源可支持的HTTP方法
  Content-Encoding             實體主體適用的編碼方式
  Content-Language            實體主體的天然語言
  Content-Length                實體主體的大小(單位:字節)
  Content-Location             替代對應資源的URI
  Content-MD5                   實體主體的報文摘要
  Content-Range                 實體主體的位置範圍
  Content-Type                  實體主體的媒體類型
  Expires                           實體主體過時的日期時間
  Last-Modified                  資源的最後修改日期時間

----------------------------------------------------------------------------------------------------------------------------------

響應狀態碼詳解

  狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
  1xx:指示信息--表示請求已接收,繼續處理
  2xx:成功--表示請求已被成功接收、理解、接受
  3xx:重定向--要完成請求必須進行更進一步的操做
  4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
  5xx:服務器端錯誤--服務器未能實現合法的請求

常見的狀態碼詳解

  100 Continue 繼續。客戶端應繼續其請求。

  101 Switching Protocols 切換協議。服務器根據客戶端的請求切換協議。只能切換到更高級的協議,例如,切換到HTTP的新版本協議

  200 OK 表示從客戶端發來的請求在服務器端被正常處理了。

   204 No Content 該狀態碼錶示服務器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。好比,當從瀏覽器發出請求處理後,返回204響應,那麼瀏覽器顯示的頁面不發生更新

  206 Partial Content 該狀態碼錶示客戶端進行了範圍請求,而服務器成功執行了這部分的GET請求。

  301 Moved Permanently 永久性重定向。該狀態碼錶示請求的資源已經被分配了新的URI,之後應使用資源如今所指的URI。 像下方給出的請求URI,當指定的資源路徑的最後忘記添加斜槓"/",就會產生301狀態碼

  302 Found 臨時性重定向。該狀態碼錶示請求的資源已被分配了新的URI,但願用戶(本次)能使用新的URI訪問。

  303 See Other 該狀態碼錶示因爲請求對應的資源存在另一個URI,應使用GET方法定向獲取請求的資源。 303狀態碼和302狀態碼有着相同的功能,但303狀態碼明確代表客戶端應當採用GET方法獲取資源。 當301,302,303響應狀態碼返回時,幾乎全部的瀏覽器都會把POST改爲GET,並刪除請求報文的主體,以後請求會自動再次發送。 301,302標準是禁止將POST方法改變成GET方法的,但實際上使用時你們都會這麼作。

  304 Not Modified 該狀態碼錶示客戶端發送附帶條件的請求時,服務器端容許請求訪問資源,但未知足條件的狀況。304狀態碼返回時,不包含任何響應的主體部分。304雖然被劃分在3XX類別中,可是和重定向沒有關係。

  307 Temporary Redirect 臨時重定向。該狀態碼與302 Found有着相同的含義。307會遵守瀏覽器標準,不會從POST變成GET。

  400 Bad Request 該狀態碼錶示請求報文中存在語法錯誤。當錯誤發生時,須要修改請求的內容後再次放鬆請求。

  401 Unauthorized 該狀態碼錶示發送的請求須要有經過HTTP認證的認證信息,另外若以前已進行過1此請求,則表示用戶認證失敗。

  403 Forbidden 該狀態碼代表對請求資源的訪問被服務器拒絕了。

  404 Not Found 該狀態碼代表服務器上沒法找到請求的資源。除此以外,也能夠在服務器端拒絕請求且不想說明理由時使用。

  500 Internal Server Error 該狀態碼代表服務器端在執行請求時發生了錯誤。

  503 Service Unavailable 該狀態碼代表服務器暫時處於超負載或正在進行停機維護,如今沒法處理請求。

相關文章
相關標籤/搜索