【圖解HTTP】讀書筆記
常見概念
- HTTP:全稱是Hyper Text Transfer Protocol,超文本傳輸協(xié)議
- 版本:HTTP/1.0房午、HTTP/1.1
- 協(xié)議:某一種公用的規(guī)則
- HTTP相關(guān)協(xié)議
- DNS:用于將域名解析為IP矿辽,供IP層使用
- TCP:提供可靠在字節(jié)流服務(wù),用于傳輸HTTP報(bào)文
- IP:根據(jù)IP地址郭厌,選擇合適的路由袋倔,發(fā)送對應(yīng)的數(shù)據(jù)包
- ARP:用于將IP解析為MAC地址,供數(shù)據(jù)鏈路層使用
- URL與URI
- URI:Uniform Resource Identifier折柠,統(tǒng)一資源標(biāo)識符奕污,也就是通過某種協(xié)議方案標(biāo)識的資源的定位符
- Uniform:以統(tǒng)一的格式進(jìn)行標(biāo)識
- Resource:可以用于標(biāo)識的資源
- Identifier:標(biāo)識具體可以標(biāo)識的對象
- 作用:用于標(biāo)識資源
- URL:Uniform Resource Locator,統(tǒng)一資源定位符液走,是URI的一個(gè)子集碳默,用于標(biāo)識某一具體的資源
- 需要注意的是,URI可以用于描述某一資源缘眶,但可能無法具體定位到某一個(gè)資源嘱根,而URL則是可以具體定位到該資源
- URI:Uniform Resource Identifier折柠,統(tǒng)一資源標(biāo)識符奕污,也就是通過某種協(xié)議方案標(biāo)識的資源的定位符
簡單的HTTP協(xié)議
通信模式:基于請求和響應(yīng)模式,沒有請求則沒有響應(yīng)巷懈,通信過程中不保存狀態(tài)信息(無狀態(tài)協(xié)議)该抒,也就是不對請求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存
報(bào)文類型
- 請求報(bào)文
- 格式(請求行 請求頭部字段\r\n請求實(shí)體內(nèi)容)
- 響應(yīng)報(bào)文
- 格式(響應(yīng)行 響應(yīng)行頭部字段\r\n響應(yīng)實(shí)體內(nèi)容)
HTTP方法
- GET:用于獲取資源
- POST:用于傳輸主體的實(shí)體
- PUT:用于傳輸文件(一般網(wǎng)站不開發(fā)該功能)
- HEAD:與GET類似,但是不返回報(bào)文主體內(nèi)容顶燕,主要用于確認(rèn)URI有效性以及資源的更新日期
- DELETE:用于刪除文件凑保,與PUT相反(一般不開放)
- OPTIONS:用于查詢指定URI資源支持的方法
- TRACE:跟蹤路徑(不怎么使用)
- CONNECT:要求使用隧道協(xié)議連接代理,主要是SSL(Secure Sockets Layer涌攻,安全套接字)和TLS(Transport Layer Security欧引,傳輸層安全)將通信的內(nèi)容加密
長連接和短連接
- 短連接:在HTTP初期版本中,每次完成一個(gè)HTTP傳輸恳谎,就需要建立一次TCP連接芝此,會(huì)造成很多不必要的開銷,使得網(wǎng)絡(luò)性能降低
- 長連接:只要通信的一端沒有明確提出斷開連接因痛,則保持TCP連接(keep-alive)婚苹,建立一個(gè)TCP連接可以進(jìn)行多次的HTT通信,減少了TCP的建立以及斷開所造成的額外開銷鸵膏,減輕負(fù)擔(dān)
管線化
在長連接的基礎(chǔ)上膊升,使得請求管線化成為可能,在這之前谭企,每一次請求都需要等到前一次請求的響應(yīng)回來之后才能發(fā)出廓译,而采用管線化之后结胀,則可以不用等到響應(yīng)再發(fā)出新的請求
Cookie技術(shù)
在請求和響應(yīng)報(bào)文中,加入Cookie信息责循,用于保存狀態(tài)信息糟港,從而使得無狀態(tài)協(xié)議HTTP協(xié)議可以保存狀態(tài)
HTTP報(bào)文信息
- HTTP報(bào)文
- 使用HTTP協(xié)議進(jìn)行通信的信息稱為HTTP報(bào)文
- 請求端發(fā)出的報(bào)文稱為請求報(bào)文
- 響應(yīng)段發(fā)出的報(bào)文稱為響應(yīng)報(bào)文
- 報(bào)文的基本格式(報(bào)文首部CRLF報(bào)文主體)
【報(bào)文結(jié)構(gòu)圖】
HTTP狀態(tài)碼
- 作用:用于告知客戶端服務(wù)端處理的結(jié)果
- 格式:3位數(shù)字 + 狀態(tài)碼說明
- 類別
- 1XX:信息性狀態(tài)碼,表示請求正在處理
- 2XX:成功狀態(tài)碼院仿,表示請求正常處理完畢
- 3XX:重定向狀態(tài)碼秸抚,需要進(jìn)行附加操作以完成請求
- 4XX:客戶端錯(cuò)誤狀態(tài)碼,服務(wù)器無法處理請求
- 5XX:服務(wù)器錯(cuò)誤狀態(tài)碼歹垫,服務(wù)器處理請求錯(cuò)誤
- 常用狀態(tài)碼
- 2XX系列剥汤,表示成功
- 200 OK,表示請求被正常處理
- 204 No Content排惨, 表示請求被正常出來吭敢,但是返回的響應(yīng)報(bào)文中不包含實(shí)體的主體部分
- 206 Partial Content,表示客戶端進(jìn)行范圍請求暮芭,而服務(wù)端成功執(zhí)行了這部分的請求鹿驼,響應(yīng)報(bào)文由Content-Range指定實(shí)體內(nèi)容
- 3XX系列,重定向辕宏,表示瀏覽器需要執(zhí)行某些特殊的處理以正確處理請求
- 301 Moved Permanently畜晰,永久性重定向,表示請求的資源已經(jīng)分配了新的URI瑞筐,以后應(yīng)該使用新的URI
- 302 Found凄鼻,臨時(shí)性重定向,表示請求的資源已經(jīng)分配新的URI聚假,希望用戶本次能使用新的URI訪問
- 303 See Other块蚌,表示請求的資源存在另外一個(gè)URI,應(yīng)使用GET方法定向獲取資源
- 304 Not Modified膘格,請求的附帶條件的資源找到峭范,但是未滿足請求的條件(與重定向無關(guān))
- 307 Temporary Redirect,臨時(shí)性重定向闯袒,與302類似
- 4XX系列虎敦,客戶端錯(cuò)誤游岳,表明客戶端是發(fā)生錯(cuò)誤的原因所在
- 400 Bad Request政敢,請求報(bào)文中存在語法錯(cuò)誤
- 401 Unauthorized,表示請求需要認(rèn)證
- 403 Forbidden胚迫,表示請求的資源被服務(wù)器拒絕
- 404 Not Found喷户,無法找到請求的資源
- 5XX系列,服務(wù)器錯(cuò)誤访锻,表示服務(wù)器本身發(fā)生錯(cuò)誤
- 500 Internal Server Error褪尝,服務(wù)器執(zhí)行請求時(shí)發(fā)生了錯(cuò)誤或臨時(shí)性故障
- 503 Service Unavailable闹获,服務(wù)器暫時(shí)處于超載狀態(tài)或正在進(jìn)行停機(jī)維護(hù),現(xiàn)在無法處理請求
- 2XX系列剥汤,表示成功
HTTP首部
- 作用:在客戶端與服務(wù)器通信過程中傳遞額外信息
- 格式:
首部字段名: 字段值1, 字段值2, ...
- 類型
-
通用首部字段(請求和響應(yīng)報(bào)文都會(huì)使用的字段)
-
請求首部字段(補(bǔ)充了請求的附加信息)
-
響應(yīng)首部字段(補(bǔ)充了響應(yīng)的附加信息)
-
實(shí)體首部字段(補(bǔ)充與實(shí)體內(nèi)容有關(guān)的信息)
-
確保安全的HTTPS
HTTP缺點(diǎn)(未加密協(xié)議)
- 使用明文通信河哑,內(nèi)容可能會(huì)被竊聽
- 不驗(yàn)證通信方的身份避诽,有可能會(huì)遭遇偽裝
- 無法驗(yàn)證報(bào)文的完整性,有可能內(nèi)容遭修改
加密策略
- 通信加密璃谨,通過和SSL或TLS組合使用沙庐,建立安全的通信通道,加密HTTP通信內(nèi)容
- 內(nèi)容加密佳吞,將參與通信的內(nèi)容本身加密
HTTPS = HTTP + 加密 + 認(rèn)證 + 完整性保護(hù)拱雏,需要注意的是,HTTPS本身并非新的協(xié)議底扳,只是在HTTP上加了SSL