HTTP 協議知識點總結(一)

HTTP

在許多大公司的面試中霸琴,經常會重點考察面試者的計算機基礎知識闯第。所以對于在計算機網絡、數據結構旺聚、操作系統(tǒng)上花費更多的時間和精力织阳,是完全值得的眶蕉。HTTP 作為應用最為廣泛的網絡協議砰粹,不論前端和后端都需要經常接觸。最近決定對 HTTP 進行了一些學習造挽,所以整理一份筆記并分享給大家碱璃。

HTTP (HyperText Transfer Protocol) 通常被我們稱為超文本傳輸協議,又譯為超文本轉移協議饭入。它的命名如何嵌器,不需要過于糾結,我們更應該重視它的內容谐丢。

HTTP 與 TCP/IP

OSI 模型與 TCP/IP 模型對比
OSI TCP/IP
應用層
表示層
會話層
應用層
傳輸層 傳輸層
網絡層 網絡層
數據鏈路層
物理層
鏈路層
TCP/IP 四層模型分析

HTTP 是 TCP/IP 協議內部的一個子集爽航,在了解它之前我們需要先了解一下 TCP/IP 相關的知識。TCP/IP(Transmission Control Protocol/Internet Protocol)協議分為應用層乾忱、傳輸層讥珍、網絡層、鏈路層四層窄瘟,我簡單的來總結舉例一下衷佃。

應用層

應用層向用戶提供一系列的應用服務。
比如我們熟悉的 DNS(Domain Name Service蹄葱,域名解析)氏义、FTP(File Transfer Protocol锄列,文件傳輸協議),當然還有我們要講的 HTTP 協議惯悠。
有時在 App Store 無法下載應用時邻邮,就經常會把 DNS 設置為谷歌的 8.8.8.8 或者國內的 114.114.114.114,這些都是比較常見的服務吮螺。

傳輸層

傳輸層提供連接兩臺計算機之間的數據傳輸饶囚。
傳輸層有兩種協議:
TCP(Transmission Control Protocol,傳輸控制協議)
UDP(User Datagram protocol鸠补,用戶數據報協議)

網絡層

網絡層規(guī)定了通過什么樣的方式將數據包傳遞給對方萝风。
網絡層協議的代表包括:
IP(Internet Protocol,互聯網協議)
ICMP(Internet Control Message Protocol紫岩,互聯網消息控制協議)

因為 IP 并不是完全可靠规惰,無法保證數據被送達。所以需要 ICMP 傳輸出錯報告控制信息泉蝌。ICMP 最著名的應用應該就是 ping 了歇万,比如我們上不去某個網站,就可以在終端輸入測試一下勋陪。

ping www.baidu.com
// 然后就可以看到一些返回值
PING www.a.shifen.com (180.149.132.151): 56 data bytes
64 bytes from 180.149.132.151: icmp_seq=0 ttl=55 time=31.431 ms
Request timeout for icmp_seq 1
64 bytes from 180.149.132.151: icmp_seq=2 ttl=55 time=30.530 ms
64 bytes from 180.149.132.151: icmp_seq=3 ttl=55 time=30.233 ms    

鏈路層

鏈路層用來鏈接網絡的硬件部分贪磺。
網絡層傳過來的數據在這里被加工成了可被物理層傳輸的結構包——幀。幀中包括 MAC 地址(Media Access Control)和一些其他信息诅愚。放一幅在網上找的圖給大家展示一下寒锚。

數據幀結構
一個訪問百度網站的例子
  1. 在瀏覽器輸入 http://www.baidu.com
  2. DNS 通過你輸入的地址违孝,找到百度的 IP 地址 14.215.177.38刹前。
  3. 通過 ARP 協議尋找 MAC 地址,建立 TCP 連接雌桑。
  4. 三次握手
    • 發(fā)送端:發(fā)送帶有 SYN 的數據包
    • 接收端:應答喇喉,發(fā)送帶有 SYN/ACK 的數據包
    • 發(fā)送端:應答,發(fā)送帶有 ACK 的數據包
  5. 通過返回的數據包顯示網頁

這個例子簡單總結一下校坑,深入的話也寫不完(攤手)拣技。

常見的 HTTP 方法

方法 說明
GET 獲取資源
POST 傳輸實體主體
PUT 傳輸替換目標資源
DELETE 刪除目標資源
HEAD 獲取報文首部
OPTIONS 獲取支持的方法
常見方法分析

GET 與 POST 的區(qū)別

這也算是面試比較常問的問題了,這里放上一個表格耍目。

GET POST
后退按鈕/刷新 無害 數據會被重新提交(瀏覽器會提示)
書簽/緩存/歷史 X
編碼類型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data膏斤。為二進制數據使用多重編碼
數據長度限制 URL 的最大長度是 2048 個字符 無限制
數據類型限制 只允許 ASCII 字符 無限制
可見性 數據在 URL 中對所有人可見、請求會保存在歷史記錄 數據保存在主體中制妄、請求不會保存在歷史記錄

PUT 請求

PUTPOST 方法的區(qū)別在于掸绞,PUT方法是冪等的:調用一次與連續(xù)調用多次是等價的(即沒有副作用),而連續(xù)調用多次POST方法可能會有副作用,比如將一個訂單重復提交多次衔掸。

DELETE 請求

如果 DELETE方法成功執(zhí)行烫幕,那么可能會有以下幾種狀態(tài)碼:

  • 狀態(tài)碼 202 (Accepted) 表示請求的操作可能會成功執(zhí)行,但是尚未開始執(zhí)行敞映。
  • 狀態(tài)碼 204 (No Content) 表示操作已執(zhí)行较曼,但是無進一步的相關信息。
  • 狀態(tài)碼 200 (OK) 表示操作已執(zhí)行振愿,并且響應中提供了相關狀態(tài)的描述信息捷犹。

HEAD 請求

HEAD 請求就如同前面表格所說的是獲取報文首部,該請求方法的一個使用場景是在下載一個大文件前先獲取其大小再決定是否要下載, 以此可以節(jié)約帶寬資源冕末。

OPTIONS 請求

OPTIONS 請求就是用于獲取目的資源所支持的通信選項萍歉,平時在做 ionic、Angular 的時候档桃,它就經常會在請求前自動調用一個 OPTIONS 方法枪孩。

HTTP 狀態(tài)碼

簡單的說,HTTP 狀態(tài)碼就是描述返回的請求結果藻肄。
這里還是拿一個表格展示一下蔑舞,由于種類比較多,所以只列舉種類嘹屯,不進行完全列舉攻询。

類別 原因
1xx Informational(信息性狀態(tài)碼) 接收的請求正在處理
2xx Success(成功狀態(tài)碼) 請求正常處理完畢
3xx Redirection(重定向狀態(tài)碼) 需要進行附加操作以完成請求
4xx Client Error(客戶端錯誤狀態(tài)碼) 服務器無法處理請求
5xx Server Error(服務端錯誤狀態(tài)碼) 服務器處理請求出錯

HTTP 報文首部字段

HTTP 報文的首部字段,主要是用來傳遞額外的重要信息州弟。

一個簡單的請求例子

前面講了這么多钧栖,這里結合請求方法、狀態(tài)碼等舉一個例子呆馁。

發(fā)起請求:

GET / HTTP/1.1
Request URL: https://www.baidu.com/favicon.ico
Host: www.baidu.com
Accept-Language: zh-CN

服務端返回:

HTTP/1.1 200 OK
Date: Sat, 07 Apr 2018 02:17:48 GMT
Server: Apache
Last-Modified: Mon, 02 Apr 2018 09:39:34 GMT
Accept-Ranges: bytes
Content-Length: 984
Content-Type: image/x-icon

現在我們分析一下這個例子桐经。

發(fā)起請求

// 請求方法 / HTTP 版本號
GET / HTTP/1.1
// 請求地址
Request URL: https://www.baidu.com/favicon.ico
// 請求資源所在服務器
Host: www.baidu.com
// 優(yōu)先選擇的語言(自然語言)
Accept-Language: zh-CN

服務端返回

// HTTP 版本毁兆、HTTP 狀態(tài)碼 200
HTTP/1.1 200 OK
// 創(chuàng)建報文的日期
Date: Sat, 07 Apr 2018 02:17:48 GMT
// HTTP 服務器的安裝信息
Server: Apache
// 資源的最后修改時間
Last-Modified: Mon, 02 Apr 2018 09:39:34 GMT
// 支持字節(jié)范圍請求
Accept-Ranges: bytes
// 實體主體的大小
Content-Length: 984
// 實體主體的類型
Content-Type: image/x-icon

HTTP 首部字段種類非常多浙滤,該例子舉例了常用的一部分,想了解更多可以研究 MDN HTTP Headers 文檔 气堕。

MDN HTTP Headers

目前里面中文翻譯不夠完整纺腊,翻譯水平高的朋友可以點擊幫忙完善一下,為開源事業(yè)出一份力:)

這次就總結到這里了茎芭,由于水平有限揖膜,難免有些許紕漏。有什么錯誤請指出梅桩,不勝感激壹粟。

參考文章

為何HTTP被翻譯為“超文本傳輸協議”是一次歷史上的重大翻譯錯誤?
HTTP 協議入門-阮一峰
TCP/IP 協議 百度百科
ping 原理與ICMP協議
漫談網絡通信——從OSI網絡模型到TCP/IP協議族
HTTP 方法-w3school
HTTP 請求方法-MDN
《圖解HTTP》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市趁仙,隨后出現的幾起案子洪添,更是在濱河造成了極大的恐慌,老刑警劉巖雀费,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件干奢,死亡現場離奇詭異,居然都是意外死亡盏袄,警方通過查閱死者的電腦和手機忿峻,發(fā)現死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辕羽,“玉大人逛尚,你說我怎么就攤上這事〉笤福” “怎么了黑低?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酌毡。 經常有香客問我克握,道長,這世上最難降的妖魔是什么枷踏? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任菩暗,我火速辦了婚禮,結果婚禮上旭蠕,老公的妹妹穿的比我還像新娘停团。我一直安慰自己,他們只是感情好掏熬,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布佑稠。 她就那樣靜靜地躺著,像睡著了一般旗芬。 火紅的嫁衣襯著肌膚如雪舌胶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天疮丛,我揣著相機與錄音幔嫂,去河邊找鬼。 笑死誊薄,一個胖子當著我的面吹牛履恩,可吹牛的內容都是我干的。 我是一名探鬼主播呢蔫,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼切心,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起绽昏,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤扬霜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后而涉,有當地人在樹林里發(fā)現了一具尸體著瓶,經...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年啼县,在試婚紗的時候發(fā)現自己被綠了材原。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡季眷,死狀恐怖余蟹,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情子刮,我是刑警寧澤威酒,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站挺峡,受9級特大地震影響葵孤,放射性物質發(fā)生泄漏。R本人自食惡果不足惜橱赠,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一尤仍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狭姨,春花似錦宰啦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至师抄,卻和暖如春漓柑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背司澎。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工欺缘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留栋豫,地道東北人挤安。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像丧鸯,于是被迫代替她去往敵國和親蛤铜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容

  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network围肥,根據使用者...
    保川閱讀 5,956評論 1 13
  • 版本記錄 前言 在互聯網行業(yè)中剿干,不管你是客戶端前端還是后臺,只要是與網絡相關穆刻,你就必須了解一些基礎知識置尔,包括這里的...
    刀客傳奇閱讀 1,877評論 0 16
  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的氢伟,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,063評論 6 174
  • 個人認為榜轿,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評論 0 8
  • 網絡概念第一天 兩臺電腦怎么通過網絡傳輸數據朵锣?怎樣才能知道傳輸的是數據谬盐?誰摸過網線? 看電影诚些,怎么看的飞傀?通過電流,...
    小吖朱閱讀 1,554評論 0 1