HTTP 協(xié)議,請求及響應(yīng)

HTTP 協(xié)議

HTTP 是一種在客戶端和服務(wù)器之間編碼和傳輸數(shù)據(jù)的方法。
它是一個(gè)請求/響應(yīng)協(xié)議:客戶端和服務(wù)端針對相關(guān)內(nèi)容和完成狀態(tài)信息的請求和響應(yīng)。
HTTP 是獨(dú)立的,允許請求和響應(yīng)流經(jīng)許多執(zhí)行負(fù)載均衡,緩存,加密和壓縮的中間路由器和服務(wù)器。

一個(gè)基本的 HTTP 請求由一個(gè)動(dòng)詞(方法)和一個(gè)資源(端點(diǎn))組成。

HTTP 請求的動(dòng)詞

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

HTTP請求

發(fā)送HTTP請求的過程就是構(gòu)建HTTP請求報(bào)文并通過TCP協(xié)議中發(fā)送到服務(wù)器指定端口(HTTP協(xié)議80/8080, HTTPS協(xié)議443)。

HTTP請求報(bào)文是由三部分組成:

  • 請求行
  • 請求報(bào)頭 Header
  • 請求正文

請求行

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

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

請求行

請求頭信息 Request Header

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

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

請求正文

當(dāng)使用POST, PUT等方法時(shí),通常需要客戶端向服務(wù)器傳遞數(shù)據(jù)。
這些數(shù)據(jù)就儲存在請求正文中。在請求包頭中有一些與請求正文相關(guān)的信息,例如: 現(xiàn)在的Web應(yīng)用通常采用 Restful 架構(gòu),請求的數(shù)據(jù)格式一般為json。這時(shí)就需要設(shè)置 Content-Type: application/json

HTTP響應(yīng)

HTTP響應(yīng)報(bào)文也是由三部分組成:

  • 狀態(tài)碼
  • 響應(yīng)報(bào)頭
  • 響應(yīng)報(bào)文

狀態(tài)碼

狀態(tài)碼是由3位數(shù)組成,第一個(gè)數(shù)字定義了響應(yīng)的類別,且有五種可能取值:

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

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

服務(wù)端應(yīng)答

響應(yīng)報(bào)頭 Response Header

響應(yīng)頭信息 Response Header

響應(yīng)報(bào)文

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

HTTP header中的 Cache-control

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

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

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

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

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

當(dāng)指定Cache-control值為“no-cache”時(shí),訪問此頁面不會在Internet臨時(shí)文件夾留下頁面?zhèn)浞荨?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,409評論 6 13
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,741評論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,345評論 3 82
  • 工作流程 一次HTTP操作稱為一個(gè)事務(wù),其工作過程可分為四步: 1)首先客戶機(jī)與服務(wù)器需要建立連接。只要單擊某個(gè)超...
    保川閱讀 4,725評論 2 14

友情鏈接更多精彩內(nèi)容