HTTP超文本傳輸協(xié)議
總綱如下(自整理,比較不重要的章節(jié)省略):
第一章?了解Web及網(wǎng)絡(luò)基礎(chǔ)
關(guān)于部分概念
?通常我們使用的網(wǎng)絡(luò)是在TCP/IP協(xié)議族的基礎(chǔ)上運(yùn)行的液荸,HTTP屬于它內(nèi)部的一個子集。在這邊就不多介紹TCP/IP了,關(guān)于它,可以看更詳實的專業(yè)書屁商,如謝希仁老師所著的《計算機(jī)網(wǎng)絡(luò)》(第七版)
FTP(File Transfer Protocol)文件傳輸協(xié)議
DNS(Domain Name System)服務(wù)提供域名到IP地址之間的解析服務(wù)
URI(Uniform Resource Identifier)統(tǒng)一資源標(biāo)識符绢彤,URI用字符串標(biāo)識某一互聯(lián)網(wǎng)資源
URL(Uniform Resourcem Locator)統(tǒng)一資源定位符七问,URL表示資源的地點(互聯(lián)網(wǎng)上所處的位置)。URL是URI的子集茫舶。
絕對URI的格式:
第二章?簡單的HTTP協(xié)議
HTTP協(xié)議規(guī)定械巡,請求從客戶端發(fā)出,最后服務(wù)器端響應(yīng)該請求并返回饶氏。換句話說讥耗,肯定是從客戶端開始建立通信的,服務(wù)器端在沒有收到接收到請求之前不會發(fā)送響應(yīng)疹启。
HTTP是一種無狀態(tài)協(xié)議古程,即自身不對請求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存(優(yōu)點是服務(wù)器不必保存狀態(tài),可以減少服務(wù)器的CPU及內(nèi)存資源的消耗)喊崖。后面為了實現(xiàn)期望的保持狀態(tài)功能引入了Cookie技術(shù)挣磨。
HTTP請求報文的組成:請求方法,請求URI荤懂,協(xié)議版本茁裙,可選的請求首字段,內(nèi)容實體
響應(yīng)報文的組成:協(xié)議版本节仿,狀態(tài)碼晤锥,用以解釋狀態(tài)碼的原因短語,可選的響應(yīng)首部字段廊宪,實體主體
HTTP方法:
? ? ①GET:獲取資源
? ? ②POST:傳輸實體主體
? ? ③PUT:傳輸文件矾瘾,上傳文件
? ? ④HEAD:和GET方法一樣,只是不返回報文主體部分箭启。用于確認(rèn)URI的有效性及資源更新的日期時間
? ? ⑤DELETE:刪除文件霜威,與PUT相反,一般不用
? ? ⑥OPTIONS:詢問支持的方法册烈,用來查詢針對請求URI指定的資源支持的方法
? ? ⑦TRACE:追蹤路徑戈泼,讓W(xué)eb服務(wù)器端將之前的請求通信環(huán)回給客戶端的方法(客戶端TRACE方法被用來確認(rèn)連接過程中發(fā)生的一系列操作,一般不用赏僧,容易引起XST跨站追蹤攻擊)
? ? ⑧CONNECT:要求用隧道協(xié)議連接代理
TCP短鏈接:HTTP的初始版本中大猛,每進(jìn)行一次HTTP通信就要斷開一次連接,通信開銷大
TCP長連接:只要任意一端沒有明確提出斷開連接淀零,則保持TCP連接狀態(tài)挽绩,HTTP1.1中,所有的默認(rèn)為持久連接(管線化方式發(fā)送成為可能驾中,可以并行發(fā)送多個請求)
第三章 HTTP報文內(nèi)的HTTP信息
報文結(jié)構(gòu):
HTTP報文中使用多部分對象集合時:
? ? ①需要在首部字段里加Content-type
? ? ②使用boundary字符串來劃分多部分對象集合指明的各類實體
? ? ③多部分對象集合的每個部分類型中唉堪,都可以含有首部字段
第四章?返回結(jié)果的HTTP狀態(tài)碼
2XX?成功
? ? ①200 OK?正常
? ? ②204 No Content?服務(wù)器接受的請求已成功處理模聋,但返回的響應(yīng)報文中不含實體的主體部分
? ? ③206 Partial Content?表示客戶端進(jìn)行了范圍請求,服務(wù)器成功執(zhí)行了這部分的GET請求
3XX?重定向
? ? ①301 Moved Permanently 永久性重定向唠亚。請求的資源已被分配了新的URI链方,以后應(yīng)使用資源現(xiàn)在所指的URI
? ? ②302 Found?臨時性重定向。
? ? ③303 See Other?請求的資源存在著另一個URI灶搜,應(yīng)使用GET方法
? ? ④304 Not Modified? 表示客戶端發(fā)送附帶條件的請求時祟蚀,服務(wù)器允許請求訪問資源,但未滿足條件的情況
? ? ⑤307 Temporary Redirect?臨時重定向與302有相同含義割卖。
? ? (當(dāng)301,302,303響應(yīng)狀態(tài)碼返回時前酿,幾乎所有的瀏覽器都會把POST改成GET,并刪除請求報文內(nèi)的主體之后請求會自動再次發(fā)送)
4XX?客戶端錯誤
? ? ①400 Bad Request?請求報文中存在語法錯誤
????②401 Unauthorized?請求需要有通過HTTP(BASIC認(rèn)證DIGEST認(rèn)證)認(rèn)證的認(rèn)證信息鹏溯,若之前已進(jìn)行過一次請求罢维,則表示用戶認(rèn)證失敗。
????③403 Forbidden?表明對請求資源的訪問被服務(wù)器拒絕了
? ? ④404 Not Found? 服務(wù)器上無法找到請求的資源
5XX?服務(wù)器錯誤
????①500 Internal Server Error?服務(wù)器端在執(zhí)行請求時發(fā)生了錯誤
????②503 Service Unavailable?服務(wù)器暫時處于超負(fù)載或正在進(jìn)行停機(jī)維護(hù)丙挽,現(xiàn)在無法處理請求
第五章 Web服務(wù)器
通信數(shù)據(jù)轉(zhuǎn)發(fā)程序
? ? ①代理 只轉(zhuǎn)發(fā)不改變URI肺孵,充當(dāng)中間人角色。但轉(zhuǎn)發(fā)時取试,需要附帶Via首部字段以標(biāo)記出經(jīng)過的主機(jī)信息(分類悬槽,一種是是否使用緩存:緩存代理怀吻,緩存服務(wù)器瞬浓;一種是是否會修改報文:透明代理,非透明代理)
? ? ②網(wǎng)關(guān)?客戶端與客戶端之間使用HTTP協(xié)議服務(wù)蓬坡,但與服務(wù)器之間可以提供非HTTP協(xié)議服務(wù)猿棉。故而可以提高通信安全性,工作機(jī)制與代理類似
? ? ③隧道?建立安全的通信線路屑咳,使用SSL等加密手段進(jìn)行通信
第六章 HTTP首部
HTTP協(xié)議的請求和響應(yīng)報文中必定包含HTTP首部萨赁,首部內(nèi)容為客戶端和服務(wù)器分別處理請求和響應(yīng)提供所需要的信息。
首部包含四類如下:
部分筆記整理
通用首部字段:
1.Cache-Control :控制緩存的行為(請求/響應(yīng)):
? ? ①no-cache:強(qiáng)制向源服務(wù)器再次驗證
? ? ②no-store:不緩存請求或響應(yīng)的任何內(nèi)容
? ? ③......(private,public)
2.Connection:管理持久連接兆龙,控制不再轉(zhuǎn)發(fā)給代理的首部字段(例如connection:upgrade則把upgrade刪除再轉(zhuǎn)發(fā))
3.Date:日期
4.trailer:報文末端的首部一覽
5......
(no-cache可以在本地緩存杖爽,也可以在代理服務(wù)器緩存,但需要服務(wù)器驗證才可以紫皇,no-store則徹底禁用緩存)
關(guān)于Cookie管理的首部字段:
1.set-cookie:
? ? ①expires:指定瀏覽器可發(fā)送Cookie的有效期
? ? ②path:限制指定Cookie的發(fā)送范圍的文件目錄
? ? ③domain:不使用更安全
? ? ④secure:僅HTTPS才可以發(fā)送Cookie
? ? ⑤httponly:防止跨站腳本攻擊
2.......
第七章?確保Web安全的HTTPS
1.HTTP的缺點:
? ? ①通信使用明文可能會被竊聽(加密)
? ? ②不驗證通信方的身份可能遭遇偽裝(證書認(rèn)證)
? ? ③無法證明報文完整性慰安,可能遭到篡改(加密算法,數(shù)字簽名)
2.解決缺點即是HTTPS:
? ? ①HTTP+加密(SSL)+認(rèn)證+完整性保護(hù)=HTTPS
? ? ②HTTPS是身披SSL外殼的HTTP
? ? ③相互交換密鑰的公開密鑰加密技術(shù)
3.HTTPS采用混合加密機(jī)制
? ??HTTPS采用共享密鑰加密和公開密鑰加密兩者并用的混合加密機(jī)制聪铺,在交換密鑰環(huán)節(jié)使用公開密鑰加密方式化焕,之后的建立通信交換報文階段則使用共享密鑰加密方式。(提高處理速度)
4.公開密鑰證書由數(shù)字證書認(rèn)證機(jī)構(gòu)和其相關(guān)機(jī)關(guān)頒發(fā)
????流程如下:
? ? ①服務(wù)器運(yùn)營人員向數(shù)字證書認(rèn)證機(jī)構(gòu)提出公開密鑰的申請
? ? ②數(shù)字證書認(rèn)證機(jī)構(gòu)在判明提出申請者的身份之后铃剔,會對已申請的公開密鑰做數(shù)字簽名撒桨,然后分配這個已簽名的公開密鑰查刻,并將該公開密鑰放入公鑰證書后綁定在一起
? ? ③服務(wù)器會將這份由數(shù)字證書認(rèn)證機(jī)構(gòu)頒發(fā)的公鑰證書發(fā)送給客戶端,以進(jìn)行公開密鑰加密方式通信凤类。
? ? ④接到證書的客戶端可使用數(shù)字證書認(rèn)證機(jī)構(gòu)的公開密鑰穗泵,對那張證書上的數(shù)字簽名進(jìn)行驗證。
(多數(shù)瀏覽器開發(fā)商發(fā)布版本時踱蠢,會事先在內(nèi)部植入常用認(rèn)證機(jī)關(guān)的公開密鑰火欧,用以保證認(rèn)證機(jī)關(guān)的公開密鑰安全轉(zhuǎn)交到用戶客戶端)
5.完整HTTPS安全通信機(jī)制
? ? ①SSL握手階段:
? ? ? ? 步驟1:客戶端通過發(fā)送Client Hello報文開始SSL通信
? ? ? ? 步驟2:服務(wù)器可進(jìn)行SSL通信時,會以Server Hello報文作為應(yīng)答
? ? ? ? 步驟3:服務(wù)器發(fā)送Certificate報文茎截,報文中包括公開密鑰證書
? ? ? ? 步驟4:最后服務(wù)器發(fā)送Server Hello Done報文通知客戶端苇侵,最初的SSL握手協(xié)商結(jié)束
? ? ②SSL連接建立:
? ? ? ? 步驟5:SSL握手結(jié)束后,客戶端以Client Key Exchange報文作為回應(yīng)企锌。報文中包含通信加密中使用的一種被稱為Pre-master?secret的隨機(jī)密碼串榆浓。該報文已用步驟3中公開密鑰進(jìn)行加密。
? ? ? ? 步驟6:接著客戶端會發(fā)送Change Cipher Spec的報文撕攒。該報文會提示服務(wù)器陡鹃,在此報文之后的通信會采用Pre-master?secret密鑰加密
? ? ? ? 步驟7:客戶端發(fā)送Finished報文。該報文包含連接至今全部報文的整體校驗值抖坪。這次握手協(xié)商是否能夠成功萍鲸,要以服務(wù)器是否能夠正確解密該報文作為判定標(biāo)準(zhǔn)。
? ? ? ? 步驟8:服務(wù)器同樣發(fā)送Change Cipher Spec報文
? ? ? ? 步驟9:服務(wù)器同樣發(fā)送Finished報文
? ? ③HTTP通信建立:
? ? ? ? 步驟10:Finished報文交換完畢之后擦俐,SSL連接建立完成脊阴。通信受到SSL的保護(hù),從此開始應(yīng)用層協(xié)議的通信蚯瞧,發(fā)送HTTP請求嘿期。
? ? ? ? 步驟11:應(yīng)用層協(xié)議通信,即發(fā)送HTTP響應(yīng)埋合。
? ? ? ? 步驟12:最后由客戶端斷開連接备徐。斷開連接時,發(fā)送close_notify報文甚颂。
(在以上流程中蜜猾,應(yīng)用層發(fā)送數(shù)據(jù)時會附加一種叫做MAC的報文摘要,MAC能夠查知報文是否遭到篡改振诬,從而保護(hù)報文的完整性)
第八章?確認(rèn)訪問用戶身份的認(rèn)證
1.SSL客戶端認(rèn)證
? ??需要事先將客戶端證書分發(fā)給客戶端蹭睡,且客戶端必須安裝此證書,與上面的流程相似贷揽,這邊省略棠笑,一般會和基于表單認(rèn)證組合形成一種雙因素認(rèn)證來使用。
2.基于表單認(rèn)證
? ? 一般情況就是用戶賬號密碼
(大部分情況下認(rèn)證都是基于表單認(rèn)證禽绪,SSL客戶端認(rèn)證雖然具有高度安全性蓖救,但由于導(dǎo)入及維持費(fèi)用洪规,尚未普及)
3.Session管理及Cookie應(yīng)用
? ? 步驟1:客戶端把用戶ID和密碼等登陸信息放入報文的實體部分,通常以POST方法把請求發(fā)送給服務(wù)器循捺。而這時斩例,會使用HTTPS通信來進(jìn)行HTML表單畫面的顯示和用戶輸入數(shù)據(jù)的發(fā)送。
? ? 步驟2:服務(wù)器會發(fā)送用以識別用戶的Session ID从橘。通過驗證從客戶端發(fā)送過來的登陸信息進(jìn)行身份認(rèn)證念赶,然后把用戶認(rèn)證狀態(tài)與Session ID綁定后記錄在服務(wù)器端。
(Session ID使用難以推測的字符串恰力,同時服務(wù)器端也需要進(jìn)行有效期的管理叉谜,保證安全性。另外踩萎,為減輕跨站腳本攻擊XSS造成的損失停局,建議事先在Cookie內(nèi)加上httponly屬性)
? ? 步驟3:客戶端接收到從服務(wù)器端發(fā)來的Seeion ID后,會將其作為Cookie保存在本地
第九章?基于HTTP的功能追加協(xié)議
1.使用瀏覽器進(jìn)行全雙工通信的WebSocket
2.HTTP/2.0
3.web服務(wù)器管理文件的WebDAV
第十章?構(gòu)建Web內(nèi)容的技術(shù)(略)
第十一章 Web的攻擊技術(shù)
1.XSS跨站腳本攻擊
2.SQL注入攻擊
3.DDoS攻擊
4.······
(Web攻擊主要分為兩類主動攻擊和被動陷阱觸發(fā)攻擊香府,這邊基本上只是簡單的了解董栽,需要找一些書籍做更深入的探索)