HTTP協(xié)議學(xué)習(xí)筆記(1) --- 基本介紹

http

HTTP基本概念

  • HTTP是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫。
  • HTTP是一個(gè)應(yīng)用層協(xié)議剃诅,由請求和響應(yīng)構(gòu)成,是一個(gè)標(biāo)準(zhǔn)的客戶端服務(wù)器模型。
  • HTTP是一個(gè)無狀態(tài)的協(xié)議粱年。

在TCP/IP協(xié)議棧中的位置

HTTP協(xié)議通常承載于TCP協(xié)議之上,有時(shí)也承載于TLS或SSL協(xié)議層之上罚拟,這個(gè)時(shí)候台诗,就成了我們常說的HTTPS完箩。如下圖所示:


默認(rèn)HTTP的端口號為80,HTTPS的端口號為443拉队。

HTTP的請求響應(yīng)模型

HTTP協(xié)議永遠(yuǎn)都是客戶端發(fā)起請求弊知,服務(wù)器回送響應(yīng)。見下圖:


這樣就限制了使用HTTP協(xié)議粱快,無法實(shí)現(xiàn)在客戶端沒有發(fā)起請求的時(shí)候秩彤,服務(wù)器將消息推送給客戶端。HTML5定義了WebSocket協(xié)議皆尔,它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)呐舔,可以借助它實(shí)現(xiàn)服務(wù)器向客戶端推送消息。

HTTP工作流程

一次HTTP操作稱為一個(gè)事務(wù)慷蠕,其工作過程可分為四步:

  1. 首先客戶機(jī)與服務(wù)器需要建立連接珊拼。只要單擊某個(gè)超級鏈接,HTTP的工作開始流炕。
  2. 建立連接后澎现,客戶機(jī)發(fā)送一個(gè)請求給服務(wù)器,請求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL)每辟、協(xié)議版本號剑辫,后邊是MIME信息包括請求修飾符、客戶機(jī)信息和可能的內(nèi)容渠欺。
  3. 服務(wù)器接到請求后妹蔽,給予相應(yīng)的響應(yīng)信息,其格式為一個(gè)狀態(tài)行挠将,包括信息的協(xié)議版本號胳岂、一個(gè)成功或錯(cuò)誤的代碼,后邊是MIME信息包括服務(wù)器信息舔稀、實(shí)體信息和可能的內(nèi)容乳丰。
  4. 客戶端接收服務(wù)器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然后客戶機(jī)與服務(wù)器斷開連接内贮。
    如果在以上過程中的某一步出現(xiàn)錯(cuò)誤产园,那么產(chǎn)生錯(cuò)誤的信息將返回到客戶端,有顯示屏輸出夜郁。對于用戶來說什燕,這些過程是由HTTP自己完成的,用戶只要用鼠標(biāo)點(diǎn)擊竞端,等待信息顯示就可以了秋冰。

方法

HTTP支持幾種不同的的請求命令,成為 HTTP方法婶熬。每一個(gè)請求報(bào)文中都包含一個(gè)方法剑勾,告訴服務(wù)器執(zhí)行什么動(dòng)作埃撵。

常見http方法 描述
GET 向特定的資源發(fā)出請求,獲取指定資源
POST 發(fā)送客戶端數(shù)據(jù)到服務(wù)器(如表單提交)
DELETE 從服務(wù)器刪除指定資源
PUT 向服務(wù)器指定資源上傳最新數(shù)據(jù)(完整替換數(shù)據(jù))
PATCH 向服務(wù)器指定資源上傳最新數(shù)據(jù)(局部更新數(shù)據(jù))

此外虽另,還有head暂刘,traceoptions等捂刺。

狀態(tài)碼

當(dāng)服務(wù)器收到請求谣拣,返回的響應(yīng)報(bào)文中會(huì)帶有一個(gè)3位數(shù)字的狀態(tài)碼,告訴客戶端請求是否成功族展。狀態(tài)碼分5類:

整體范圍 已定義范圍 描述
100-199 100-101 信息提示
200-299 200-206 成功
300-399 300-305 重定向
400-499 400-415 客戶端錯(cuò)誤
500-599 500-505 服務(wù)器錯(cuò)誤

常見的狀態(tài):200表示成功森缠; 302表示重定向;404表示找不到資源仪缸。

HTTP報(bào)文

報(bào)文是具有固定格式的數(shù)據(jù)塊贵涵,由3部分組成:

  • 對報(bào)文進(jìn)行描述的起始行(start line)
  • 包含屬性的首部塊(header)
  • 可選的,包含數(shù)據(jù)的主體部分(body)

請求報(bào)文格式

<method> <request-URL> <version>
<headers>

<entity-body>

響應(yīng)報(bào)文格式

<version> <status> <reason-phrase>
<headers>

<entity-body>

只有起始行不同恰画,主體是可選的宾茂。下圖是一個(gè)報(bào)文例子:


Content-Type 字段

頭信息必須是 ASCII 碼,后面的數(shù)據(jù)可以是任何格式拴还。因此跨晴,服務(wù)器回應(yīng)的時(shí)候,必須告訴客戶端片林,數(shù)據(jù)是什么格式端盆,所以有了Content-Type這個(gè)字段。
常見的類型:

  • text/plain
  • text/html
  • text/css
  • image/jpeg
  • image/png
  • video/mp4
  • audio/mp4
  • application/javascript
  • application/json

這些數(shù)據(jù)類型總稱為MIME type费封,每個(gè)值包括一級類型和二級類型爱谁,之間用斜杠分隔。
除了預(yù)定義的類型孝偎,廠商也可以自定義類型:

application/vnd.debian.binary-package

上面的類型表明,發(fā)送的是Debian系統(tǒng)的二進(jìn)制數(shù)據(jù)包凉敲。
MIME type還可以在尾部使用分號衣盾,添加參數(shù)。

Content-Type: text/html; charset=utf-8

上面的類型表明爷抓,發(fā)送的是網(wǎng)頁势决,而且編碼是UTF-8。
客戶端請求的時(shí)候蓝撇,可以使用Accept字段聲明自己可以接受哪些數(shù)據(jù)格式果复。

Accept: /

上面代碼中,客戶端聲明自己可以接受任何格式的數(shù)據(jù)渤昌。
MIME type不僅用在HTTP協(xié)議虽抄,還可以用在其他地方走搁,比如HTML網(wǎng)頁。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- 等同于 -->
<meta charset="utf-8" /> 

Content-Encoding 字段

由于發(fā)送的數(shù)據(jù)可以是任何格式迈窟,因此可以把數(shù)據(jù)壓縮后再發(fā)送私植。Content-Encoding字段說明數(shù)據(jù)的壓縮方法。

  • Content-Encoding: gzip
  • Content-Encoding: compress
  • Content-Encoding: deflate

客戶端在請求時(shí)车酣,用Accept-Encoding字段說明自己可以接受哪些壓縮方法曲稼。

Accept-Encoding: gzip, deflate

參考資料:
《HTTP權(quán)威指南》
阮一峰-http入門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市湖员,隨后出現(xiàn)的幾起案子贫悄,更是在濱河造成了極大的恐慌,老刑警劉巖娘摔,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窄坦,死亡現(xiàn)場離奇詭異,居然都是意外死亡晰筛,警方通過查閱死者的電腦和手機(jī)嫡丙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來读第,“玉大人曙博,你說我怎么就攤上這事×鳎” “怎么了父泳?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吴汪。 經(jīng)常有香客問我惠窄,道長,這世上最難降的妖魔是什么漾橙? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任杆融,我火速辦了婚禮,結(jié)果婚禮上霜运,老公的妹妹穿的比我還像新娘脾歇。我一直安慰自己,他們只是感情好淘捡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布藕各。 她就那樣靜靜地躺著,像睡著了一般焦除。 火紅的嫁衣襯著肌膚如雪激况。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音乌逐,去河邊找鬼竭讳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛黔帕,可吹牛的內(nèi)容都是我干的代咸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼成黄,長吁一口氣:“原來是場噩夢啊……” “哼呐芥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奋岁,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤思瘟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后闻伶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滨攻,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年蓝翰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了光绕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畜份,死狀恐怖诞帐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情爆雹,我是刑警寧澤停蕉,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站钙态,受9級特大地震影響慧起,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜册倒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一蚓挤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驻子,春花似錦灿意、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甲捏。三九已至演熟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芒粹。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工兄纺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人化漆。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓估脆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親座云。 傳聞我的和親對象是個(gè)殘疾皇子疙赠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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