你該懂的HTTP協(xié)議

  1. HTTP 是什么
  2. URL 詳解
  3. HTTP 之請求篇
  4. HTTP 之響應(yīng)篇
d6ca7bcb0a46f21f2a74db17f6246b600c33ae36.jpg

一凿歼、HTTP是什么

1梯轻、概述</br>

HTTP 全稱是 <em style="color:red">HyperText Transfer Protocal </em>食磕,即:超文本傳輸協(xié)議,從 1990 年開始就在 WWW 上廣泛應(yīng)用喳挑,是現(xiàn)今在 WWW 上應(yīng)用最多的協(xié)議彬伦,HTTP 是應(yīng)用層協(xié)議,當(dāng)你上網(wǎng)瀏覽網(wǎng)頁的時候伊诵,瀏覽器和 web 服務(wù)器之間就會通過 HTTP 在 Internet 上進(jìn)行數(shù)據(jù)的發(fā)送和接收单绑。HTTP 是一個基于請求/響應(yīng)模式的、無狀態(tài)的協(xié)議曹宴。即我們通常所說的 <em style="color:red">Request/Response</em>

http 協(xié)議簇

TCP IP 協(xié)議圖_thumb.jpg
2搂橙、特點(diǎn)

支持客戶端/服務(wù)器模式</br>
簡單快速:客戶向服務(wù)器請求服務(wù)時,只需傳送請求方法和路徑笛坦。由于HTTP 協(xié)議簡單区转,使得HTTP 服務(wù)器的程序規(guī)模小,因而通信速度很快
靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象版扩。正在傳輸?shù)念愋陀?Content-Type 加以標(biāo)記
無連接:無連接的含義是限制每次鏈接只處理一個請求废离。服務(wù)器處理完哭護(hù)的請求,并收到客戶的應(yīng)答后礁芦,即斷開鏈接蜻韭,采用這種方式可以節(jié)省傳輸時間
無狀態(tài):HTTP 協(xié)議是無狀態(tài)協(xié)議悼尾。無狀態(tài)是指協(xié)議對于事物處理沒有記憶能力飒赃。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息社裆,則它必須重傳边翁,這樣可能會導(dǎo)致每次連接傳送的數(shù)據(jù)量增大蛤虐。另一方面睡扬,在服務(wù)器不需要先前信息時它的應(yīng)答就較快


二溉卓、URL詳解

1叁扫、簡介

<em style="color:red">URL(Uniform Resource Locator)</em>是統(tǒng)一資源定位符的簡稱里覆,有時候也被俗稱為網(wǎng)頁地址(網(wǎng)址)活翩,如同是網(wǎng)絡(luò)上的門牌烹骨,是因特網(wǎng)上標(biāo)準(zhǔn)的資源的地址

2、基本組成

通用的格式:<em style="color:red">schema://host[:port#]/path/…/[?query-string][#anchor]</em>

名稱 功能
schema 訪問服務(wù)器以獲取資源時要使用哪種協(xié)議材泄,比如沮焕,http,https 和 FTP 等
host HTTP 服務(wù)器的 IP 地址或域名
port HTTP 服務(wù)器的默認(rèn)端口是 80拉宗,這種情況下端口號可以省略峦树,如果使用了別的端口,必須指明旦事,例如http://www.cnblogs.com:8080
path 訪問資源的路徑
query-string 發(fā)給 http 服務(wù)器的數(shù)據(jù)
anchor

舉個例子:http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff 其中

名稱 功能
Schema http
host www.mywebsite.com
path /js/test/test.aspx
Query-string name=sviergn&x=true
anchor stuff

再來張比較直觀的圖

魁巩!


三、HTTP 之請求篇

HTTP 的請求報(bào)文分為三個部分姐浮, <em style="color:red">請求行谷遂、請求頭、請求體</em>
卖鲤!

1肾扰、請求行</br>

請求行(Request line)分為三個部分:請求方法、請求地址和協(xié)議版本
請求方法
<em style="color:red">HTTP/1.1</em> 協(xié)議中共定義了八種方法(也叫“動作”)來以不同的方式操作指定的資源

方法名 功能
GET 向指定的資源發(fā)出“顯示”請求蛋逾,使用 GET 方法應(yīng)該只用在讀取數(shù)據(jù)上集晚,而不應(yīng)該用于產(chǎn)生“副作用”的操作中
POST 指定資源提交數(shù)據(jù),請求服務(wù)器進(jìn)行處理(例如提交表單或者上傳文件)区匣。數(shù)據(jù)被包含在請求文本中偷拔。這個請求可能會創(chuàng)建新的資源或者修改現(xiàn)有資源,或兩者皆有亏钩。
PUT 向指定資源位置上傳其最新內(nèi)容
DELETE 請求服務(wù)器刪除 Request-URI 所標(biāo)識的資源
OPTIONS 使服務(wù)器傳回該資源所支持的所有HTTP請求方法莲绰。用*來代替資源名稱,向 Web 服務(wù)器發(fā)送 OPTIONS 請求铸屉,可以測試服務(wù)器功能是否正常運(yùn)作
HEAD 與 GET 方法一樣钉蒲,都是向服務(wù)器發(fā)出指定資源的請求,只不過服務(wù)器將不傳回資源的本文部分彻坛,它的好處在于,使用這個方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲取其中關(guān)于該資源的信息(原信息或稱元數(shù)據(jù))
TRACE 顯示服務(wù)器收到的請求昌屉,主要用于測試或診斷
CONNECT HTTP/1.1 中預(yù)留給能夠?qū)⑦B接改為通道方式的代理服務(wù)器钙蒙。通常用于 SSL 加密服務(wù)器的鏈接(經(jīng)由非加密的 HTTP 代理服務(wù)器)

其中,最常見的是 GETPOST 方法间驮,如果是 RESful 接口的話一般會用到PUT躬厌、DELETEGET竞帽、POST(分別對應(yīng)增刪查改)扛施,這里附上一篇有關(guān) REST 的文章 什么是 RES

2、請求頭
請求頭可用于傳遞一些附加信息屹篓,格式為:鍵: 值疙渣,注意冒號后面有一個空格:


請求和響應(yīng)常見通用的 Header

方法名 功能
Content-Type 請求體/響應(yīng)體的類型,如:text/plain堆巧、application/json
Accept 說明接收的類型妄荔,可以多個值,用,(英文逗號)分開
Content-length 請求體/響應(yīng)體的長度谍肤,單位字節(jié)
Content-Encoding 請求體/響應(yīng)體的編碼格式啦租,如 gzip、deflate
Accept-Encoding 告知對方我方接受的 Content-Encoding
ETag 給當(dāng)前資源的標(biāo)識荒揣,和Last-Modified篷角、If-None-Match、If-Modified-Since配合系任,用于緩存控制
Cache-Control 取值一般為no-cache恳蹲、max-age=xx,xx為整數(shù)赋除,表示資源緩存有效期(秒)

常見的請求 Header

方法名 功能
Authorization 用于設(shè)置身份認(rèn)證信息
User-Agent 用戶標(biāo)識阱缓,如:OS 和瀏覽器的類型和版本
If-Modified-Since 值為上一次服務(wù)器返回的Last-Modified值,用于確定某個資源是否被更改過举农,沒有更改過就從緩存中讀取
If-None-Match 值為上一次服務(wù)器返回的ETag 值荆针,一般會和If-Modified-Since
Cookie 已有的Cookie
Referer 標(biāo)識請求引用自哪個地址,比如你從頁面 A 跳轉(zhuǎn)到頁面 B 時颁糟,值為頁面 A 的地址
Host 請求的主機(jī)和端口號

請求體
請求體(又叫請求正文)是 post 請求方式中的請求參數(shù)航背,以 key = value 形式進(jìn)行存儲,多個請求參數(shù)之間用&連接棱貌,如果請求當(dāng)中請求體玖媚,那么在請求頭當(dāng)中的 Content-Length 屬性記錄的就是該請求體的長度

根據(jù)應(yīng)用場景的不同,HTTP 請求的請求體有三種不同的形式

第一種:</br>
移動開發(fā)者常見的婚脱,請求體是任意類型的今魔,服務(wù)器不會解析請求體勺像,請求體的處理需要自己解析,如 <mark> POST/JSON </mark> 的時候就是這類

第二種:</br>

第二種和第三種都有固定的格式错森,是服務(wù)器端開發(fā)人員最先了解的兩種吟宦。這里的格式要求就是 URL 中 Query String 的格式要求:多個鍵值對之間用&連接,鍵與值之間用=連接涩维,且只能用ASCII 字符殃姓,非ASCII 字符需使用UrlEncode編碼

第三種:</br>

第三種請求體被分成多個部分,文件上傳 時會被使用瓦阐,這種格式最先是被用于郵件傳輸中蜗侈,每個字段/文件都被 boundary(Content-Type中指定的)分成單獨(dú)的段,每段以--加boundary 開頭睡蟋,然后是該段的描述頭踏幻,描述頭之后空一行接內(nèi)容,請求結(jié)束的標(biāo)識為boundary 后面加--

區(qū)分是否被當(dāng)成文件的關(guān)鍵是 Content-Disposition 是否包含filename薄湿,因?yàn)槲募胁煌念愋徒斜叮赃€要使用 Content-Type 指示文件的類型,如果不知道是什么類型取值可以為 application/octet-stream 表示文件是一個二進(jìn)制的文件豺瘤,如果不是文件則 Content-Type可以省略


四吆倦、HTTP 之響應(yīng)篇

HTTP 響應(yīng)的格式上除狀態(tài)行(第一行)與請求報(bào)文的請求行不一樣之外,其他的就格式而言是一樣的坐求,但排除狀態(tài)行和請求行的區(qū)別蚕泽,從 Header 上還是可以區(qū)分出 HTTP 請求和 HTTP 響應(yīng)的區(qū)別的,怎么區(qū)別就要看前面的 Header 啦


1桥嗤、響應(yīng)狀態(tài)行

狀態(tài)碼
狀態(tài)碼(就是上圖中的響應(yīng)碼)须妻,如果想查看各種狀態(tài)碼具體的含義,可以看一下這篇文章HTTP狀態(tài)碼對照表泛领,當(dāng)然這么多狀態(tài)碼要想全部都記住的話荒吏,還是比較困難的。
在平時我們只要記住這些就差不多了
狀態(tài)碼 對應(yīng)的信息

  • 1XX 提示信息—表示請求已接收渊鞋,繼續(xù)處理;
  • 2XX 用于表示請求已被成功接收绰更、理解、接收;
  • 3XX 用于表示資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它 URL锡宋,也就是所謂的重定向;
  • 4XX 客戶端錯誤—請求有語法錯誤或者請求無法實(shí)現(xiàn);
  • 5XX 服務(wù)器端錯誤—服務(wù)器未能實(shí)現(xiàn)合法的請求;
2儡湾、響應(yīng)頭

響應(yīng)頭同樣可用于傳遞一些附加信息


常見的響應(yīng) Header
方法名 功能
Date 服務(wù)器的日期
Last-Modified 該資源最后被修改的時間
Transfer-Encoding 取值一般為 chunked,出現(xiàn)在 Content-Length 不能確定的情況下执俩,表示服務(wù)器不知道響應(yīng)板體的數(shù)據(jù)大小徐钠,一般同時出現(xiàn)Content-Encoding響應(yīng)頭
Set-Cookie 設(shè)置 Cookie
Location 重定向到另一個 URL,如輸入瀏覽器就輸入 baidu.com 回車役首,會自動跳轉(zhuǎn)到https://www.baidu.com 就是通過這個響應(yīng)頭控制的
Server 后臺服務(wù)器
3尝丐、響應(yīng)體

響應(yīng)體也就是網(wǎng)頁的正文內(nèi)容显拜,一般在響應(yīng)頭中會用 Content-Length 來明確響應(yīng)體的長度,便于瀏覽器接收摊崭,對于大數(shù)據(jù)量的正文信息讼油,也會使用 chunked 的編碼方式

http 協(xié)議種類 和協(xié)議所屬層

wKiom1SIBljRr48mAAFPpXRKpXU847.jpg

參考的文章
你應(yīng)該知道的 HTTP 基礎(chǔ)知識
http協(xié)議-簡介

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杰赛,一起剝皮案震驚了整個濱河市呢簸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乏屯,老刑警劉巖根时,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辰晕,居然都是意外死亡蛤迎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門含友,熙熙樓的掌柜王于貴愁眉苦臉地迎上來替裆,“玉大人,你說我怎么就攤上這事窘问×就” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵惠赫,是天一觀的道長把鉴。 經(jīng)常有香客問我,道長儿咱,這世上最難降的妖魔是什么庭砍? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮混埠,結(jié)果婚禮上怠缸,老公的妹妹穿的比我還像新娘。我一直安慰自己钳宪,他們只是感情好揭北,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著使套,像睡著了一般罐呼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侦高,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天嫉柴,我揣著相機(jī)與錄音,去河邊找鬼奉呛。 笑死计螺,一個胖子當(dāng)著我的面吹牛夯尽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播登馒,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼匙握,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陈轿?” 一聲冷哼從身側(cè)響起圈纺,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎麦射,沒想到半個月后蛾娶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潜秋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年蛔琅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峻呛。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡罗售,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钩述,到底是詐尸還是另有隱情寨躁,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布切距,位于F島的核電站朽缎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谜悟。R本人自食惡果不足惜话肖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葡幸。 院中可真熱鬧最筒,春花似錦、人聲如沸蔚叨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔑水。三九已至邢锯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搀别,已是汗流浹背丹擎。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒂培。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓再愈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親护戳。 傳聞我的和親對象是個殘疾皇子翎冲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)媳荒,斷路器抗悍,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,372評論 6 152
  • HTTP概述 超文本傳輸協(xié)議(HTTP肺樟,HyperText Transfer Protocol) 是互聯(lián)網(wǎng)上應(yīng)用最...
    曹淵說創(chuàng)業(yè)閱讀 3,855評論 2 61
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)檐春,內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,226評論 3 82
  • 自2013大專畢業(yè),工作至今已有4年么伯,中間僅換過一次工作,可為什么自己還是一個窮逼卡儒? 第一份工作在...
    董先聲閱讀 509評論 2 2