Http

HTTP 協(xié)議


HTTP 協(xié)議詳解

超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議棋枕。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法片橡。1960年美國(guó)人Ted Nelson構(gòu)思了一種通過(guò)計(jì)算機(jī)處理文本信息的方法贯涎,并稱(chēng)之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標(biāo)準(zhǔn)架構(gòu)的發(fā)展根基。Ted Nelson組織協(xié)調(diào)萬(wàn)維網(wǎng)協(xié)會(huì)(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é)議一樣碧聪,也需要以特定的方式進(jìn)行數(shù)據(jù)包的封裝,并按照一定的流程實(shí)現(xiàn)通信交互液茎,而基于HTTP協(xié)議的請(qǐng)求/響應(yīng)模式的信息交互過(guò)程可分為四個(gè)步驟逞姿。

  • (1) 客戶(hù)端與服務(wù)器需要建立連接,如:TCP連接
  • (2) 連接建立后捆等,客戶(hù)端向服務(wù)器發(fā)送一個(gè)請(qǐng)求滞造,請(qǐng)求報(bào)文由三部分組成:請(qǐng)求行、消息報(bào)頭栋烤、響應(yīng)內(nèi)容谒养。
  • (3) 服務(wù)器接到請(qǐng)求后,解析該請(qǐng)求并返回響應(yīng)信息明郭,響應(yīng)報(bào)文由三部分組成:狀態(tài)行买窟、消息頭、響應(yīng)內(nèi)容薯定。
  • (4) 客戶(hù)端接收服務(wù)器所返回的信息并進(jìn)行解析始绍、處理和顯示。

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

請(qǐng)求報(bào)文和響應(yīng)的報(bào)文結(jié)構(gòu)簡(jiǎn)介

HTTP協(xié)議的請(qǐng)求和響應(yīng)數(shù)據(jù)包一般被稱(chēng)為請(qǐng)求報(bào)文和響應(yīng)報(bào)文译蒂,根據(jù)協(xié)議標(biāo)準(zhǔn)曼月,請(qǐng)求報(bào)文和響應(yīng)報(bào)文是由報(bào)文首部、空行和報(bào)文主題組成的柔昼,而請(qǐng)求報(bào)文的首部又由請(qǐng)求行哑芹、請(qǐng)求首部字段、通用首部字段捕透、實(shí)體首部字段組成聪姿,響應(yīng)報(bào)文的首部由狀態(tài)行、響應(yīng)首部字段乙嘀、通用首部字段末购、實(shí)體首部字段組成。結(jié)構(gòu)圖請(qǐng)看往下看:

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

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

  • 一盟榴、請(qǐng)求行,由請(qǐng)求方法婴噩、請(qǐng)求URL擎场、HTTP版本組成;
  • 二几莽、是狀態(tài)行迅办,由HTTP版本、狀態(tài)碼章蚣、原因短語(yǔ)組成站欺;
  • 三、首部字段纤垂,包含了請(qǐng)求首部镊绪、響應(yīng)首部、通用首部洒忧、實(shí)體首部四種類(lèi)型,一般有名字和值組成够颠;
  • 四熙侍、是其他報(bào)文首部字段,包含了一些RFC()未定義的首部?jī)?nèi)容履磨;
  • 五蛉抓、是報(bào)文主體,由任意數(shù)據(jù)組成剃诅。

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

這里我們?cè)L問(wèn) laravel官網(wǎng) 的請(qǐng)求報(bào)文和響應(yīng)報(bào)文巷送,來(lái)具體分析

請(qǐng)求報(bào)文
響應(yīng)報(bào)文
請(qǐng)求行

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

請(qǐng)求行中的請(qǐng)求方法用來(lái)描述服務(wù)器應(yīng)該執(zhí)行的操作,而請(qǐng)求URL指定了操作的資源矛辕,HTTP版本用來(lái)標(biāo)識(shí)客戶(hù)端使用的HTTP版本笑跛。圖中 訪(fǎng)問(wèn)的Laravel網(wǎng)站請(qǐng)求報(bào)文的請(qǐng)求方法為“GET”付魔,請(qǐng)求URL為“https://laravel.com/”,HTTP版本位 “HTTP/1.1”飞蹂。在HTTP規(guī)范中定義了一組方法几苍,用于指定服務(wù)器的響應(yīng)動(dòng)作,如GET方法是指從服務(wù)器獲取一個(gè)文本陈哑,具體請(qǐng)求報(bào)文頭方法及其功能描述見(jiàn)下表:

HTTP請(qǐng)求報(bào)文方法及其功能

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

(2) 狀態(tài)行

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

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

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

典型狀態(tài)碼

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

(3) 首部字段

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

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

首部字段通常由字段名和字段值構(gòu)成桶唐,中間通過(guò)“:”分隔栅葡。下面簡(jiǎn)要介紹下四類(lèi)字段的作用和部分首部字段含義。

通用首部字段

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

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

請(qǐng)求首部字段

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

HTTP 報(bào)文請(qǐng)求首部字段及含義

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

響應(yīng)首部字段

響應(yīng)首部字段是描述HTTP 響應(yīng)本身的字段楣富,一般用于HTTP響應(yīng)報(bào)文中凿掂,主要用于描述響應(yīng)主機(jī)的信息、功能等纹蝴,通過(guò)響應(yīng)首部字段有助于客戶(hù)端處理響應(yīng)庄萎,并在將來(lái)發(fā)出更適合服務(wù)器的請(qǐng)求,如定時(shí)刷新的Refresh頭塘安、設(shè)置Cookie的Set-Cookie頭等糠涛。下面列出常用的響應(yīng)首部字段及含義:

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

實(shí)體首部字段

實(shí)體首部字段用于描述HTTP報(bào)文體數(shù)據(jù)字段切黔。由于報(bào)文主體可以存在于請(qǐng)求報(bào)文和響應(yīng)報(bào)文中砸脊,所以這種類(lèi)型首部字段可以應(yīng)用在這兩種類(lèi)型的報(bào)文中。實(shí)體首部字段用于描述主體內(nèi)容的元信息纬霞,包括實(shí)體信息類(lèi)型凌埂、長(zhǎng)度、壓縮方法诗芜、最后一次修改時(shí)間侨舆、數(shù)據(jù)有效性等,以便告訴接收者如何進(jìn)行處理绢陌,如Content-Language 用于描述報(bào)文主體的語(yǔ)言等。下面列出常用的實(shí)體首部字段及含義:

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叙淌,一起剝皮案震驚了整個(gè)濱河市秤掌,隨后出現(xiàn)的幾起案子愁铺,更是在濱河造成了極大的恐慌,老刑警劉巖闻鉴,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茵乱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡孟岛,警方通過(guò)查閱死者的電腦和手機(jī)瓶竭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渠羞,“玉大人斤贰,你說(shuō)我怎么就攤上這事〈窝” “怎么了荧恍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)屯吊。 經(jīng)常有香客問(wèn)我送巡,道長(zhǎng),這世上最難降的妖魔是什么盒卸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任骗爆,我火速辦了婚禮,結(jié)果婚禮上世落,老公的妹妹穿的比我還像新娘淮腾。我一直安慰自己,他們只是感情好屉佳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布谷朝。 她就那樣靜靜地躺著,像睡著了一般武花。 火紅的嫁衣襯著肌膚如雪圆凰。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天体箕,我揣著相機(jī)與錄音专钉,去河邊找鬼。 笑死累铅,一個(gè)胖子當(dāng)著我的面吹牛跃须,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娃兽,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼菇民,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起第练,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阔馋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后娇掏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呕寝,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年婴梧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了下梢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡志秃,死狀恐怖怔球,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浮还,我是刑警寧澤竟坛,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站钧舌,受9級(jí)特大地震影響担汤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洼冻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一崭歧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撞牢,春花似錦率碾、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至畜挥,卻和暖如春仔粥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟹但。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工躯泰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人华糖。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓麦向,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親客叉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磕蛇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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