《圖解 HTTP》筆記(二)HTTP 協(xié)議

1. 請求報文(Request)

客戶端向服務器發(fā)起 HTTP 請求腾务,請求的報文結(jié)構如下:

GET /index.htm HTTP/1.1
Host: www.baidu.com

一開始的 GET 是請求方法(Request Method),/index.htm 表明要訪問的服務器上的文件,HTTP/1.1 表示 HTTP 的版本號勺卢,用來提示服務器客戶端所使用的 HTTP 協(xié)議版本抹恳。

通過 Chrome 的開發(fā)者工具妇斤,我們看一個比較復雜的請求茎截。這是百度登錄賬號的請求椎组。

開發(fā)者工具截圖

與剛才不一樣的地方是油狂,這一次使用的請求方法(Request Method)是 POST。GET 與 POST 之間的區(qū)別有哪些?

網(wǎng)上公認的一些區(qū)別有下面這些专筷。(ps:有些區(qū)別其實在某種程度上來說算不上區(qū)別弱贼,看每個人的理解吧。)

  • GET在瀏覽器回退時是無害的磷蛹,而POST會再次提交請求吮旅。
  • GET產(chǎn)生的URL地址可以被Bookmark,而POST不可以味咳。
  • GET請求會被瀏覽器主動cache鸟辅,而POST不會,除非手動設置莺葫。
  • GET請求只能進行url編碼匪凉,而POST支持多種編碼方式。
  • GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里捺檬,而POST中的參數(shù)不會被保留再层。
  • GET請求在URL中傳送的參數(shù)是有長度限制的,而POST么有堡纬。(URL 長度限制其實是與瀏覽器實現(xiàn)以及操作系統(tǒng)有關的聂受,HTTP 規(guī)范中并沒有對 URL 長度做限制。)
  • 對參數(shù)的數(shù)據(jù)類型烤镐,GET只接受ASCII字符蛋济,而POST沒有限制。
  • GET比POST更不安全炮叶,因為參數(shù)直接暴露在URL上碗旅,所以不能用來傳遞敏感信息。(這里的安全性比較镜悉,大家自行判斷吧祟辟,有些人可能會認為這兩者所謂的安全性并沒有什么區(qū)別。)
  • GET參數(shù)通過URL傳遞侣肄,POST放在Request body中旧困。

其實在我看來,GET 與 POST 主要的區(qū)別還是在“語義”上稼锅。在 HTTP 規(guī)范中吼具,GET 主要用于信息的獲取,而不會對數(shù)據(jù)產(chǎn)生影響矩距,不會去增加或修改數(shù)據(jù)拗盒。而 POST 則主要用于向服務器傳輸數(shù)據(jù),增加或修改數(shù)據(jù)剩晴。這兩者在語義上存在根本的區(qū)別锣咒。在 RESTFul (一種后端 Web Service 的接口風格)風格的 API 中,GET 就表示獲取資源赞弥,POST 表示新增資源毅整。

2. 響應報文(Response)

響應頭信息
響應主體

3. HTTP 方法

GET:通常用于獲取資源。
POST:向服務器發(fā)送數(shù)據(jù)绽左,主要目的不是用于獲取響應內(nèi)容悼嫉。
PUT:傳輸文件(在 RESTful 架構中用于修改資源)。
DELETE:刪除文件拼窥。
OPTIONS:詢問支持的方法戏蔑。
HEAD:獲得響應的頭部,不返回 body鲁纠。
TRACE:追蹤路徑总棵,讓 Web 服務器端將之前的請求通信環(huán)回給客戶端的方法。
CONNECT:要求用隧道協(xié)議連接代理(連接代理時使用)

4. 持久連接

當瀏覽一個包含圖片及其他資源的 HTML 頁面時改含,除了請求 HTML 頁面情龄,還會請求頁面中的其他資源。而每次請求都會產(chǎn)生新的 TCP 連接建立和斷開捍壤,這增加了通信量骤视。HTTP/1.1 和 HTTP/1.0(沒有完全標準化)通過持久連接(HTTP Persistent Connections,也稱為 HTTP keep-alive 或 HTTP connection reuse)來解決這一問題鹃觉。持久連接的特點是专酗,只有在客戶端或服務器其中一方明確提出斷開連接的時候,才會斷開 TCP 連接盗扇。

5. 管線化(pipelining)

持久連接為管線化提供了基礎祷肯。管線化的意思是,不用等待上一個請求收到響應疗隶,就可以發(fā)送下一個請求躬柬,這樣就可以做到同時并行發(fā)送多個請求。

6. Cookie

HTTP 協(xié)議是無狀態(tài)的抽减,也就是說不對之前發(fā)生過的請求和響應信息進行保存及管理允青,這樣的優(yōu)點是可以減少服務器的 CPU 和內(nèi)存資源的消耗。

但是在有些時候卵沉,我們卻需要在一定程度上保存客戶端的狀態(tài)颠锉,例如用戶登錄之后獲取個人信息等,如果沒有一種機制來保存登錄狀態(tài)史汗,則需要每次發(fā)起 HTTP 請求時帶上用戶認證信息參數(shù)(例如用戶名密碼)琼掠。

為了解決這個問題,引入了 Cookie 技術停撞,Cookie 通過在請求頭及響應頭中附上信息來保存狀態(tài)瓷蛙。服務器可以在響應頭中附上名為 Set-Cookie 的字段悼瓮,來告知客戶端保存 Cookie(也就是頭部的這段信息)〖桠客戶端每次發(fā)起請求的時候横堡,則會自動在請求頭中附帶上保存的 Cookie 信息,服務器端則可以根據(jù)客戶端發(fā)來的 Cookie 信息來判斷客戶端狀態(tài)(例如判斷是否已經(jīng)登錄冠桃,以及登錄的用戶是誰)命贴。單純的 Cookie 模式只在客戶端上保存信息,而不在服務器端保存信息食听。

7. Session

一種更常見的模式是在服務器上保存信息胸蛛,也就是 Session 機制。當客戶端向服務器發(fā)起請求時樱报,服務器會在內(nèi)存中為該客戶端創(chuàng)建一塊區(qū)域葬项,用來存儲當前客戶端的一些信息,例如登錄狀態(tài)已經(jīng)用戶信息等迹蛤。并將 Session 對應的 Session Id (類似于鑰匙的概念玷室,通過 session id 可以查找到對應的 session 信息)以 Cookie 的形式發(fā)送給客戶端,客戶端就會將 Cookie 保存至本地笤受,每次請求帶上 Cookie穷缤,服務器端就可以通過 Cookie 中的 Session Id 來獲取客戶端的狀態(tài)。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箩兽,一起剝皮案震驚了整個濱河市津肛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汗贫,老刑警劉巖身坐,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異落包,居然都是意外死亡部蛇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門咐蝇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涯鲁,“玉大人,你說我怎么就攤上這事有序∧ㄍ龋” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵旭寿,是天一觀的道長警绩。 經(jīng)常有香客問我,道長盅称,這世上最難降的妖魔是什么肩祥? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任后室,我火速辦了婚禮,結(jié)果婚禮上混狠,老公的妹妹穿的比我還像新娘岸霹。我一直安慰自己,他們只是感情好檀蹋,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著云芦,像睡著了一般俯逾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舅逸,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天桌肴,我揣著相機與錄音,去河邊找鬼琉历。 笑死坠七,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的旗笔。 我是一名探鬼主播彪置,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蝇恶!你這毒婦竟也來了拳魁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤撮弧,失蹤者是張志新(化名)和其女友劉穎潘懊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贿衍,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡授舟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贸辈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片释树。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖擎淤,靈堂內(nèi)的尸體忽然破棺而出躏哩,到底是詐尸還是另有隱情,我是刑警寧澤揉燃,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布扫尺,位于F島的核電站,受9級特大地震影響炊汤,放射性物質(zhì)發(fā)生泄漏正驻。R本人自食惡果不足惜弊攘,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姑曙。 院中可真熱鬧襟交,春花似錦、人聲如沸伤靠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宴合。三九已至焕梅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卦洽,已是汗流浹背贞言。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工阀蒂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留该窗,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓蚤霞,卻偏偏與公主長得像酗失,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子昧绣,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

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

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理级零,服務發(fā)現(xiàn),斷路器滞乙,智...
    卡卡羅2017閱讀 134,715評論 18 139
  • http協(xié)議有http0.9奏纪,http1.0,http1.1和http2三個版本斩启,但是現(xiàn)在瀏覽器使用的是htt...
    一現(xiàn)_閱讀 1,867評論 0 3
  • 一序调、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,373評論 6 152
  • Http協(xié)議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來源于博客園作者MIN飛翔的HTTP協(xié)...
    Sivin閱讀 5,226評論 3 82
  • 深入淺出HTTP協(xié)議(WEB開發(fā)和面試必備) 1.基礎概念篇 a.簡介 HTTP是Hyper Text Trans...
    半世韶華憶闌珊閱讀 1,222評論 0 7