Http

HTTP 協(xié)議


HTTP 協(xié)議詳解

超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個標(biāo)準(zhǔn)。設(shè)計HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法。1960年美國人Ted Nelson構(gòu)思了一種通過計算機處理文本信息的方法,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標(biāo)準(zhǔn)架構(gòu)的發(fā)展根基。Ted Nelson組織協(xié)調(diào)萬維網(wǎng)協(xié)會(World Wide Web Consortium)和互聯(lián)網(wǎng)工程工作小組(Internet Engineering Task Force )共同合作研究,最終發(fā)布了一系列的RFC,其中著名的RFC 2616定義了HTTP 1.1。

HTTP 百度百科

HTTP協(xié)議工作流程

Http協(xié)議與其他協(xié)議一樣,也需要以特定的方式進行數(shù)據(jù)包的封裝,并按照一定的流程實現(xiàn)通信交互,而基于HTTP協(xié)議的請求/響應(yīng)模式的信息交互過程可分為四個步驟。

  • (1) 客戶端與服務(wù)器需要建立連接,如:TCP連接
  • (2) 連接建立后,客戶端向服務(wù)器發(fā)送一個請求,請求報文由三部分組成:請求行、消息報頭、響應(yīng)內(nèi)容。
  • (3) 服務(wù)器接到請求后,解析該請求并返回響應(yīng)信息,響應(yīng)報文由三部分組成:狀態(tài)行、消息頭、響應(yīng)內(nèi)容。
  • (4) 客戶端接收服務(wù)器所返回的信息并進行解析、處理和顯示。

通常,瀏覽器訪問一個頁面,需要發(fā)出多次請求獲取不同的響應(yīng)內(nèi)容,在HTTP/1.0版本中默認(rèn)是傳輸一次數(shù)據(jù)就關(guān)閉連接,而在HTTP/1.1版本中默認(rèn)為是持久連接,即一次TCP連接可以完成多次HTTP請求。是否支持持久連接,是由消息報頭中的connection字段決定的,如果請求或響應(yīng)中的connection設(shè)置為close,則客戶端和服務(wù)器的連接為非持久連接。

請求報文和響應(yīng)的報文結(jié)構(gòu)簡介

HTTP協(xié)議的請求和響應(yīng)數(shù)據(jù)包一般被稱為請求報文和響應(yīng)報文,根據(jù)協(xié)議標(biāo)準(zhǔn),請求報文和響應(yīng)報文是由報文首部、空行和報文主題組成的,而請求報文的首部又由請求行、請求首部字段、通用首部字段、實體首部字段組成,響應(yīng)報文的首部由狀態(tài)行、響應(yīng)首部字段、通用首部字段、實體首部字段組成。結(jié)構(gòu)圖請看往下看:

請求報文和響應(yīng)報文的結(jié)構(gòu)圖.png

根據(jù)以上結(jié)構(gòu),可以將HTTP協(xié)議報文包含的內(nèi)容分為五類:

  • 一、請求行,由請求方法、請求URL、HTTP版本組成;
  • 二、是狀態(tài)行,由HTTP版本、狀態(tài)碼、原因短語組成;
  • 三、首部字段,包含了請求首部、響應(yīng)首部、通用首部、實體首部四種類型,一般有名字和值組成;
  • 四、是其他報文首部字段,包含了一些RFC()未定義的首部內(nèi)容;
  • 五、是報文主體,由任意數(shù)據(jù)組成。

分析下 Laravel 官網(wǎng)的Http協(xié)議

這里我們訪問 laravel官網(wǎng) 的請求報文和響應(yīng)報文,來具體分析

請求報文
響應(yīng)報文
請求行

(1) 請求行 (火狐可以查看到)

請求行中的請求方法用來描述服務(wù)器應(yīng)該執(zhí)行的操作,而請求URL指定了操作的資源,HTTP版本用來標(biāo)識客戶端使用的HTTP版本。圖中 訪問的Laravel網(wǎng)站請求報文的請求方法為“GET”,請求URL為“https://laravel.com/”,HTTP版本位 “HTTP/1.1”。在HTTP規(guī)范中定義了一組方法,用于指定服務(wù)器的響應(yīng)動作,如GET方法是指從服務(wù)器獲取一個文本,具體請求報文頭方法及其功能描述見下表:

HTTP請求報文方法及其功能

方法名稱 功能描述 是否包含主體數(shù)據(jù)
GET 從服務(wù)器獲取文本
POST 向服務(wù)器發(fā)送客戶端數(shù)據(jù)
PUT 上傳客戶端的文件到服務(wù)器
DELETE 從服務(wù)器刪除一個文件
HEAD 只獲取服務(wù)器可以執(zhí)行的方法
OPTIONS 獲取服務(wù)器可以執(zhí)行的方法
TRACE 對經(jīng)過代理服務(wù)器的報文進行追蹤

(2) 狀態(tài)行

狀態(tài)行包含響應(yīng)報文服務(wù)器使用的HTTTP版本、數(shù)字狀態(tài)碼和原因短語,對于圖響應(yīng)報文的狀態(tài)行,其中HTTP版本為“HTTP/1.1”,數(shù)字狀態(tài)碼位 “200”,原因短語“OK”。HTTP的狀態(tài)共分為五大類,用于描述返回的響應(yīng)結(jié)果。實際HTTP規(guī)范中定義的狀態(tài)碼有十幾種,比較具有代表性的狀態(tài)碼及含義如下:

HTTP響應(yīng)報文狀態(tài)碼及其含義

狀態(tài)碼范圍 狀態(tài)碼類別 含義
100~199 信息類狀態(tài)碼 收到請求初始部分,請繼續(xù)發(fā)送
200~299 成功狀態(tài)碼
300~399 重定向狀態(tài)碼
400~499 客戶端錯誤狀態(tài)碼
500~599 服務(wù)器錯誤狀態(tài)碼

典型狀態(tài)碼

典型狀態(tài)碼 原因短語 含義
100 continue 收到請求初始部分,請繼續(xù)發(fā)送
200 OK 請求已經(jīng)被正常處理
204 No Content 請求被成功處理,但沒有主體數(shù)據(jù)
206 Partial Content 對資源部分請求成功
301 Moved Permanently 請求的URL資源已被更新,響應(yīng)首部包含新的URL
302 Found 請求的URL資源臨時更新
304 Not Modified 請求不符合條件,需要更改條件
400 Bad Request 客戶端發(fā)送一個錯誤請求
401 Unauthorized 請求需要包含通過HTTP認(rèn)證的信息
403 Forbiden 訪問被拒絕
404 Not Found 沒有找到請求的URL
500 Internal Server Error 服務(wù)器出現(xiàn)錯誤,無法提供請求的資源
503 Service Unavailable 服務(wù)器正忙,無法提供正常請求的服務(wù)

(3) 首部字段

首部字段是構(gòu)成HTTP報文的基本要素之一,這部分包含的信息也是最為豐富,主要用于規(guī)定客戶端和服務(wù)端在處理請求和響應(yīng)時的操做。通常,根據(jù)首部字段的用途可以分為四類:

  • 通用首部字段
  • 請求首部字段
  • 響應(yīng)首部字段
  • 實體首部字段

首部字段通常由字段名和字段值構(gòu)成,中間通過“:”分隔。下面簡要介紹下四類字段的作用和部分首部字段含義。

通用首部字段

通用首部字段一般用來提供HTTP報文的最基本信息,這些信息無論是請求報文還是響應(yīng)報文都可以使用,主要用于描述HTTP協(xié)議本身。比如描述HTTP是否支持久連接的Connetion 字段、HTTP發(fā)送日期的Date字段、用于緩存控制的Cache-Control 字段等。下面列出了通用首部字段及含義:

通用首部字段名 功能說明
Connection 用于指定客服端/服務(wù)器間連接選項,例如指定連續(xù)連接或者通過“close”選項通知服務(wù)器在響應(yīng)完成后關(guān)閉連接
Date 報文創(chuàng)建日期
Transfer-Enocoding 指定報文主體數(shù)據(jù)的編碼方式
Update 發(fā)送端協(xié)議準(zhǔn)備升級為新版本
Via 報文經(jīng)過中間節(jié)點(網(wǎng)關(guān)、代理等)的信息
Cache-Control 指定緩存行為
Warning 錯誤通知

請求首部字段

請求首部字段一般用于HTTP請求報文中,主要描述客戶端的版本、處理能力等信息,用于幫助服務(wù)器更好的地提供請求響應(yīng)字段,如告訴服務(wù)器只接收某種響應(yīng)內(nèi)容的Accept字段、發(fā)送Cookies的Cookie字段等。下面列出的是常用的請求首部字段及含義:

HTTP 報文請求首部字段及含義

請求首部字段名 功能說明
Accept 客戶端可處理的媒體類型
Accept-Charset 客戶端優(yōu)先接收的字符集
Accept-Encoding 客戶端優(yōu)先接收的編碼格式,如 zip
Accept-Langular 客戶端希望的語言種類
Authorization 授權(quán)信息,通常用于對服務(wù)器發(fā)送的WWW-Authenticate
Cookie 用于客戶端向服務(wù)器發(fā)送一個令牌
Cookie2 用來說明客戶端支持的Cookie版本
From 客戶端的E-mail 地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它
Host 請求資源所在服務(wù)器的主機和端口
If-Modified-Since 只有當(dāng)所有請求的內(nèi)容在指定的日期之后又經(jīng)過修改才會返回它,否則返回 304 “Not Modified”應(yīng)答
Referer 包含一個URL頁面出發(fā)訪問請求頁面
User-Agent 客戶端信息,如客戶端應(yīng)用程序名稱、版本等
UA-OS 客戶端主機上的操作系統(tǒng)名稱、版本等信息
UA-Pixels 客服端顯示器像素信息

響應(yīng)首部字段

響應(yīng)首部字段是描述HTTP 響應(yīng)本身的字段,一般用于HTTP響應(yīng)報文中,主要用于描述響應(yīng)主機的信息、功能等,通過響應(yīng)首部字段有助于客戶端處理響應(yīng),并在將來發(fā)出更適合服務(wù)器的請求,如定時刷新的Refresh頭、設(shè)置Cookie的Set-Cookie頭等。下面列出常用的響應(yīng)首部字段及含義:

響應(yīng)首部字段名 功能含義
Age 響應(yīng)資源創(chuàng)建的時間
Set-Cookie 在客戶端設(shè)置一個Cookie,服務(wù)器用來對客戶端進行標(biāo)識
Server 服務(wù)器應(yīng)用程序軟件的名稱、版本等信息
Retry-After 當(dāng)資源不可用時,在此期間再次發(fā)送請求
Refresh 表示瀏覽器應(yīng)該在多長時間之后刷新文檔,以秒計

實體首部字段

實體首部字段用于描述HTTP報文體數(shù)據(jù)字段。由于報文主體可以存在于請求報文和響應(yīng)報文中,所以這種類型首部字段可以應(yīng)用在這兩種類型的報文中。實體首部字段用于描述主體內(nèi)容的元信息,包括實體信息類型、長度、壓縮方法、最后一次修改時間、數(shù)據(jù)有效性等,以便告訴接收者如何進行處理,如Content-Language 用于描述報文主體的語言等。下面列出常用的實體首部字段及含義:

實體首部字段名 功能含義
Allow 資源主體可以支持的HTTP請求方法
Content-Location 通知接收端主體的URL,用于接收端定位到該資源
Content-Encoding 主體適用的編碼方式
Content-Language 解釋主體時適用的語言
Content-Length 主體的大小,通常以字節(jié)數(shù)表示
Content-MD5 主體的MD5校驗和
Content-Type 主體的對象類型

HTTP協(xié)議作為應(yīng)用層協(xié)議離不開TCP/IP協(xié)議的支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內(nèi)容