http協(xié)議簡單解析

主要記錄一下http協(xié)議的一些簡單的知識秽之,主要包括請求消息成肘,響應(yīng)消息的組成亿遂,以及get和post的‘對比’浓若,對于更詳細(xì)的信息可以看下http RFC盒使。https也沒有做說明。

http基于請求響應(yīng)模式七嫌,無狀態(tài)少办,應(yīng)用層的協(xié)議,特點如下:

  • 支持C/S模式诵原。
  • 無連接英妓,每次連接只處理一個請求,服務(wù)器處理完請求绍赛,并返回給客戶端之后蔓纠,就會斷開連接。
  • 無狀態(tài)吗蚌,指的是協(xié)議對于事務(wù)處理沒有記憶能力腿倚,如果需要前面的信息,需要重傳蚯妇。

http請求消息(Request)

http請求由三部分組成:請求行敷燎,請求頭,請求體箩言。比如下面的例子:

GET / HTTP/1.1
Host: cxis.me
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4,zh-TW;q=0.2,nb;q=0.2,da;q=0.2

GET / HTTP/1.1是請求行硬贯,GET是請求方法,/是請求資源在服務(wù)器上的路徑陨收,HTTP/1.1是http協(xié)議版本號饭豹。

剩下的是請求頭,格式為xxxx: value务漩。

這里是get方法拄衰,所有沒有請求體,請求體是向服務(wù)器提交的數(shù)據(jù)饵骨,在請求頭和請求體中間會有一行空行翘悉。

http響應(yīng)消息(Response)

響應(yīng)消息包括:響應(yīng)行,響應(yīng)頭宏悦,響應(yīng)體镐确。一個響應(yīng)消息如下:

HTTP/1.1 200 OK
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Wed, 03 May 2017 08:32:57 GMT
Access-Control-Allow-Origin: *
Expires: Wed, 03 May 2017 13:51:42 GMT
Cache-Control: max-age=600
Content-Encoding: gzip
X-GitHub-Request-Id: AACA:40A3:65A338:8EB391:5909DE15
Content-Length: 9905
Accept-Ranges: bytes
Date: Wed, 03 May 2017 14:41:45 GMT
Via: 1.1 varnish
Age: 0
Connection: keep-alive
X-Served-By: cache-nrt6130-NRT
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1493822505.031176,VS0,VE181
Vary: Accept-Encoding
X-Fastly-Request-ID: bc385cef3dbff07f200175fa461c920cb6ca4b3f

HTTP/1.1 200 OK是響應(yīng)行,HTTP/1.1是http協(xié)議版本號饼煞,200是狀態(tài)碼,OK是狀態(tài)消息诗越,和響應(yīng)碼對應(yīng)砖瞧。

剩下的是響應(yīng)頭,這里沒有響應(yīng)體嚷狞。GET方法的響應(yīng)體為空块促。

請求方法

  • GET荣堰,獲取被Request-URI指定的信息。
  • POST竭翠,向服務(wù)器提交數(shù)據(jù)振坚。
  • HEAD,獲取響應(yīng)消息報頭斋扰。
  • PUT渡八,請求服務(wù)器保存一個資源。
  • DELETE传货,請求服務(wù)器刪除資源屎鳍。
  • TRACE,請求服務(wù)器回應(yīng)收到的請求消息问裕。
  • OPTIONS逮壁,查詢相關(guān)的資源和選項。
  • CONNECT粮宛,預(yù)留關(guān)鍵字窥淆,現(xiàn)在沒有用。

GET和POST對比

GET和POST我覺得不應(yīng)該硬拿來對比巍杈,他們是http規(guī)范定義的兩種不同的方法祖乳,各有各的用處,為什么要對比呢秉氧?

關(guān)于定義

GET是獲取資源眷昆,是冪等的;POST是提交資源汁咏,是非冪等的亚斋。它們是http協(xié)議里面定義的兩個不同的方法。

關(guān)于緩存

GET請求的響應(yīng)是可緩存的攘滩,但是需要響應(yīng)滿足HTTP緩存的要求帅刊。POST響應(yīng)是不可緩存的,除非響應(yīng)里面有Cache-Control或者Expires屬性漂问。

關(guān)于請求數(shù)據(jù)

GET方法會把請求的數(shù)據(jù)附加到URL之后赖瞒,也就是放到請求行中;POST則是把提交的數(shù)據(jù)放到請求體中蚤假。因此在地址欄可以直接看到GET請求提交的參數(shù)栏饮,而看不到POST請求的參數(shù)。

關(guān)于安全

通常我們說的有關(guān)安全磷仰,只是相對的安全袍嬉,比如說GET方法能直接在地址欄看到參數(shù),而POST不能。這通常讓人認(rèn)為是安全和不安全的區(qū)別伺通,其實如果抓包或者其他手段一樣可以看到GET和POST提交的數(shù)據(jù)箍土,兩者并沒有什么安全可言。

關(guān)于數(shù)據(jù)長度

http協(xié)議并沒有對傳輸?shù)臄?shù)據(jù)大小做限制罐监,也沒有對URL長度做限制吴藻,所以從http協(xié)議本身來說并沒有長度的限制。而我們通常說的URL或者數(shù)據(jù)的長度限制其實是瀏覽器或者服務(wù)器的限制弓柱。

對于GET請求來說沟堡,提交的數(shù)據(jù)都會在URL中,各瀏覽器對URL的限制不太一樣吆你,所以沒有什么標(biāo)準(zhǔn)可言弦叶;對于POST請求來說,數(shù)據(jù)存放在請求體中妇多,并沒有長度限制伤哺,但是服務(wù)器通常會有對POST提交數(shù)據(jù)的大小限制,因此也沒有標(biāo)準(zhǔn)可言者祖。

關(guān)于POST兩次請求

對于GET請求立莉,瀏覽器會把請求頭和請求體一起發(fā)送;而對于POST請求七问,瀏覽器會先發(fā)送請求頭蜓耻,服務(wù)器響應(yīng)100 continue之后,瀏覽器再發(fā)送請求體械巡。

狀態(tài)碼

在響應(yīng)消息的狀態(tài)行中有一個狀態(tài)碼和狀態(tài)消息刹淌,兩者是對應(yīng)的,狀態(tài)碼總共有五大類:

  • 1xx讥耗,做指示信息有勾,表示請求被接收到,繼續(xù)處理古程。
  • 2xx蔼卡,成功,表示被成功接收挣磨,理解雇逞,接受。
  • 3xx茁裙,重定向塘砸,為了完成請求必須采取進一步的動作。
  • 4xx呜达,客戶端錯誤谣蠢,請求有語法錯誤或者請求無法實現(xiàn)。
  • 5xx查近,服務(wù)端錯誤眉踱,服務(wù)器未能實現(xiàn)請求。

而具體的狀態(tài)碼有很多霜威,不在這里一一列舉谈喳,下面是一些常用到的:

  • 200 OK,表示請求成功
  • 400 Bad Request 客戶端錯誤戈泼,有語法錯誤
  • 401 Unauthorized婿禽,請求未授權(quán)
  • 403 Forbidden,服務(wù)器拒絕服務(wù)
  • 404 Not Found大猛,資源不存在
  • 405 Method Not Allowed扭倾,方法不被允許
  • 500 Internal Server Error,服務(wù)器內(nèi)部錯誤
  • 502 Bad Gateway挽绩,網(wǎng)關(guān)錯誤
  • 503 Service Unavailable膛壹,服務(wù)不可用

消息報頭

在請求消息的第二部分是請求頭,在響應(yīng)消息的第二部分是響應(yīng)頭唉堪,請求頭和響應(yīng)頭又叫做消息報頭模聋,這是可選的。其實消息報頭不只是包括請求頭和響應(yīng)頭唠亚,一個消息報頭包括:普通報頭链方、請求報頭、響應(yīng)報頭灶搜、實體報頭祟蚀。

下面列出了各種報頭,含義沒有一一列出割卖,如有需要可以查看http RFC

普通報頭

普通報頭既適用于請求消息也適用于響應(yīng)消息前酿,這些頭域不適用于實體傳輸,只適用于傳輸消息究珊。

  • Cache-Control 控制緩存指令薪者,緩存指令是單向,獨立的剿涮。
  • Connection 允許發(fā)送指定連接的選項
  • Date 消息產(chǎn)生的日期和時間
  • Pragma
  • Trailer
  • Transfer-Encoding
  • Upgrade
  • Via
  • Waring

請求報頭

  • Accept 指定客戶端接受哪些類型的信息
  • Accept-Charset 指定客戶端接受的字符集
  • Accept-Encoding 指定客戶端可接受的內(nèi)容編碼
  • Accept-Language 指定客戶端可接受的語言
  • Authorization 客戶端有權(quán)限查看某個資源
  • Expect
  • From
  • Host 指定被請求資源的主機和端口號
  • If-Match
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • If-Unmodified-Since
  • Max-Forwards
  • Proxy-Authorization
  • Range
  • Referer
  • TE
  • User-Agent

響應(yīng)報頭

  • Accept-Ranges
  • Age
  • ETag
  • Location
  • Proxy-Authenticate
  • Retry-After
  • Server
  • Vary
  • WWW-Authenticate

實體報頭

  • Allow
  • Content-Encoding
  • Content-Language
  • Content-Length 指明實體正文的長度言津,以字節(jié)方式存儲的十進制數(shù)字來表示
  • Content-Location
  • Content-MD5
  • Content-Range
  • Content-Type 指明發(fā)送給接收者的實體正文的媒體類型
  • Expires 響應(yīng)過期的日期和時間
  • Last-Modified 用于指示資源的最后修改日期和時間
  • extension-header
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市取试,隨后出現(xiàn)的幾起案子悬槽,更是在濱河造成了極大的恐慌,老刑警劉巖瞬浓,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件初婆,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機磅叛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門屑咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弊琴,你說我怎么就攤上這事兆龙。” “怎么了敲董?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵紫皇,是天一觀的道長。 經(jīng)常有香客問我腋寨,道長聪铺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任萄窜,我火速辦了婚禮铃剔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脂倦。我一直安慰自己番宁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布赖阻。 她就那樣靜靜地躺著蝶押,像睡著了一般。 火紅的嫁衣襯著肌膚如雪火欧。 梳的紋絲不亂的頭發(fā)上棋电,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音苇侵,去河邊找鬼赶盔。 笑死,一個胖子當(dāng)著我的面吹牛榆浓,可吹牛的內(nèi)容都是我干的于未。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼陡鹃,長吁一口氣:“原來是場噩夢啊……” “哼烘浦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起萍鲸,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤闷叉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后脊阴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體握侧,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡蚯瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了品擎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埋合。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖孽查,靈堂內(nèi)的尸體忽然破棺而出饥悴,到底是詐尸還是另有隱情坦喘,我是刑警寧澤盲再,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瓣铣,受9級特大地震影響答朋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棠笑,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一梦碗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蓖救,春花似錦洪规、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至从橘,卻和暖如春念赶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恰力。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工叉谜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踩萎。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓停局,卻偏偏與公主長得像,于是被迫代替她去往敵國和親香府。 傳聞我的和親對象是個殘疾皇子董栽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)回还,斷路器裆泳,智...
    卡卡羅2017閱讀 134,662評論 18 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,359評論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)柠硕,內(nèi)容來源于博客園作者MIN飛翔的HTTP協(xié)...
    Sivin閱讀 5,224評論 3 82
  • HTTP概述 超文本傳輸協(xié)議(HTTP工禾,HyperText Transfer Protocol) 是互聯(lián)網(wǎng)上應(yīng)用最...
    曹淵說創(chuàng)業(yè)閱讀 3,853評論 2 61
  • 蓬頭稚子11閱讀 151評論 0 0