HTTP 協議,請求及響應

HTTP 協議

HTTP 是一種在客戶端和服務器之間編碼和傳輸數據的方法。
它是一個請求/響應協議:客戶端和服務端針對相關內容和完成狀態信息的請求和響應。
HTTP 是獨立的,允許請求和響應流經許多執行負載均衡,緩存,加密和壓縮的中間路由器和服務器。

一個基本的 HTTP 請求由一個動詞(方法)和一個資源(端點)組成。

HTTP 請求的動詞

HTTP 是依賴于較低級協議(如 TCP 和 UDP)的應用層協議。

HTTP請求

發送HTTP請求的過程就是構建HTTP請求報文并通過TCP協議中發送到服務器指定端口(HTTP協議80/8080, HTTPS協議443)。

HTTP請求報文是由三部分組成:

  • 請求行
  • 請求報頭 Header
  • 請求正文

請求行

格式如下:
Method Request-URL HTTP-Version CRLF
例如 GET /index.html HTTP1.1

常用的方法有: GET, POST, PUT, DELETE, OPTIONS(返回請求的資源所支持的方法), HEAD(僅請求響應首部)

請求行

請求頭信息 Request Header

請求報頭允許客戶端向服務器傳遞請求的附加信息和客戶端自身的信息。
客戶端不一定特指瀏覽器,有時候也可使用Linux下的CURL命令以及HTTP客戶端測試工具等。
常見的請求報頭有:

  • Accept:指定客戶端用于接受哪些類型的信息
  • Accept-Charset
  • Accept-Encoding:指定客戶端接受的編碼方式
  • Accept-Language
  • Content-Type
  • Authorization:客戶端提供給服務器的認證信息
  • Cookie:每次請求時都會攜帶上 Cookie 以方便服務器端識別是否是同一個客戶端
  • Connection:設置為 keep-alive 用于告訴客戶端本次HTTP請求結束之后并不需要關閉TCP連接,這樣可以使下次HTTP請求使用相同的TCP通道,節省TCP連接建立的時間
  • User-Agent:用戶代理,一般情況是瀏覽器,也有其他類型
請求頭信息 Request Header

請求正文

當使用POST, PUT等方法時,通常需要客戶端向服務器傳遞數據。
這些數據就儲存在請求正文中。在請求包頭中有一些與請求正文相關的信息,例如: 現在的Web應用通常采用 Restful 架構,請求的數據格式一般為json。這時就需要設置 Content-Type: application/json

HTTP響應

HTTP響應報文也是由三部分組成:

  • 狀態碼
  • 響應報頭
  • 響應報文

狀態碼

狀態碼是由3位數組成,第一個數字定義了響應的類別,且有五種可能取值:

  • 1xx:指示信息–表示請求已接收,繼續處理
  • 2xx:成功–表示請求已被成功接收、理解、接受
  • 3xx:重定向–要完成請求必須進行更進一步的操作
  • 4xx:客戶端錯誤–請求有語法錯誤或請求無法實現
  • 5xx:服務器端錯誤–服務器未能實現合法的請求

例如 HTTP 1.1 200 OK(即版本號 + 狀態碼)

服務端應答

響應報頭 Response Header

響應頭信息 Response Header

響應報文

服務器返回給瀏覽器的文本信息,通常HTML, CSS, JS, 圖片等文件就放在這一部分。

HTTP header中的 Cache-control

網頁的緩存是由HTTP消息頭中的 Cache-control 來控制的,常見的取值有private、no-cache、max-age、must-revalidate等,默認為private。其作用根據不同的重新瀏覽方式分為以下幾種情況:

  • 打開新窗口
    如果指定 Cache-control 的值為private、no-cache、must-revalidate,那么打開新窗口訪問時都會重新訪問服務器。而如果指定了max-age值,那么在此值內的時間里就不會重新訪問服務器,例如:Cache-control: max-age=5 表示當訪問此網頁后的5秒內再次訪問不會去服務器。

  • 在地址欄回車
    如果指定 Cache-control 的值為private或must-revalidate,則只有第一次訪問時會訪問服務器,以后就不再訪問。如果值為no-cache,那么每次都會訪問。如果值為max-age,則在過期之前不會重復訪問。

  • 按后退按扭
    如果指定 Cache-control 的值為private、must-revalidate、max-age,則不會重訪問,而如果為no-cache,則每次都重復訪問

  • 按刷新按扭
    無論為何值,都會重復訪問

當指定Cache-control值為“no-cache”時,訪問此頁面不會在Internet臨時文件夾留下頁面備份。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,176評論 6 13
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,440評論 6 152
  • Http協議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創,內容來源于博客園作者MIN飛翔的HTTP協...
    Sivin閱讀 5,252評論 3 82
  • 工作流程 一次HTTP操作稱為一個事務,其工作過程可分為四步: 1)首先客戶機與服務器需要建立連接。只要單擊某個超...
    保川閱讀 4,637評論 2 14