一、TCP
1.1 TCP/IP 的分層管理
TCP/IP 協(xié)議族按層次分別分為以下 4 層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層。
應(yīng)用層
應(yīng)用層決定了向用戶提供應(yīng)用服務(wù)時通訊的活動。有FTP,DNS服務(wù)和HTTP協(xié)議。
傳輸層
傳輸層對上層應(yīng)用層,提供網(wǎng)絡(luò)連接中的兩臺計算機之間的數(shù)據(jù)傳輸。
有兩個協(xié)議,TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報協(xié)議)
網(wǎng)絡(luò)層
網(wǎng)絡(luò)層用來處理在網(wǎng)絡(luò)上流通的數(shù)據(jù)包。該層規(guī)定了通過怎樣的路徑到達對方計算機,并把數(shù)據(jù)包給對方。
數(shù)據(jù)鏈路層
用來處理連接網(wǎng)絡(luò)的硬件部分。

1.2 TCP三次握手


二、HTTP報文
用于 HTTP 協(xié)議交互的信息被稱為 HTTP 報文。請求端(客戶端)的 HTTP 報文叫做請求報文,響應(yīng)端(服務(wù)器端)的叫做響應(yīng)報文。
HTTP 報文大致可分為報文首部和報文主體兩塊。兩者由最初出現(xiàn)的空行(CR+LF)來劃分。
2.1 報文結(jié)構(gòu)
- 請求行
包含用于請求的方法,請求 URI 和 HTTP 版本。 - 狀態(tài)行
包含響應(yīng)結(jié)果的狀態(tài)碼,原因短語和HTTP版本。 - 首部字段
包含表示請求和響應(yīng)的各種條件和屬性的各類首部。
一般有 4 種首部,分別是:通用首部、請求首部、響應(yīng)首部和實體首部。 - 其他
可能包含 HTTP 的 RFC 里未定義的首部(Cookie 等)。
2.2 HTTP狀態(tài)碼
- 2XX 成功
200 OK
204 No Content 返回的響應(yīng)報文中不含實體的主體部分。
206 Partial Content 該狀態(tài)碼表示客戶端進行了范圍請求,而服務(wù)器成功執(zhí)行了這部分的 GET 請求。 - 3XX 重定向
301 Moved Permanently 永久性重定向
302 Found 臨時性重定向
303 See Other 303 狀態(tài)碼明確表示客戶端應(yīng)當采用 GET 方法獲取資源,這點與 302 狀態(tài)碼有區(qū)別。
304 Not Modified 服務(wù)器端資源未改變,可直接使用客戶端未過期的緩存 - 4XX 客戶端錯誤
4XX 的響應(yīng)結(jié)果表明客戶端是發(fā)生錯誤的原因所在。
400 Bad Request 該狀態(tài)碼表示請求報文中存在語法錯誤
401 Unauthorized 該狀態(tài)碼表示發(fā)送的請求需要有通過 HTTP 認證
403 Forbidden 未獲得文件系統(tǒng)的訪問授權(quán)
404 Not Found 該狀態(tài)碼表明服務(wù)器上無法找到請求的資源 - 5XX 服務(wù)器錯誤
500 Internal Server Error 表明服務(wù)器端在執(zhí)行請求時發(fā)生了錯誤
503 Service Unavailable 表明服務(wù)器暫時處于超負載或正在進行停機維護
三、HTTP首部
3.1 4 種 HTTP 首部字段類型
- 通用首部字段(General Header Fields)
請求報文和響應(yīng)報文兩方都會使用的首部。 - 請求首部字段(Request Header Fields)
從客戶端向服務(wù)器端發(fā)送請求報文時使用的首部。補充了請求的附加內(nèi)容、客戶端信息、響應(yīng)內(nèi)容相關(guān)優(yōu)先級等信息。 - 響應(yīng)首部字段(Response Header Fields)
從服務(wù)器端向客戶端返回響應(yīng)報文時使用的首部。補充了響應(yīng)的附加內(nèi)容,也會要求客戶端附加額外的內(nèi)容信息。 - 實體首部字段(Entity Header Fields)
針對請求報文和響應(yīng)報文的實體部分使用的首部。補充了資源內(nèi)容更新時間等與實體有關(guān)的信息。
3.2 HTTP/1.1 首部字段一覽
- 通用首部字段
Cache-Control 控制緩存的行為
Connection 逐跳首部、連接的管理
Upgrade 升級為其他協(xié)議 - 請求首部字段
Accept 用戶代理可處理的媒體類型
Accept-Charset 優(yōu)先的字符集
Accept-Encoding 優(yōu)先的內(nèi)容編碼
Accept-Language 優(yōu)先的語言(自然語言)
If-Match 比較實體標記(ETag)
If-None-Match 比較實體標記(與 If-Match 相反)
If-Modified-Since 比較資源的更新時間
If-Unmodified-Since 比較資源的更新時間(與 If-Modified-Since 相反)
User-Agent HTTP 客戶端程序的信息 - 響應(yīng)首部字段
ETag 資源的匹配信息
Location 令客戶端重定向至指定 URI - 實體首部字段
Content-Type 實體主體的媒體類型
Expires 實體主體過期的日期時間
Last-Modified 資源的最后修改日期時間
3.3 通用首部字段
3.3.1 cache-control 緩存控制
no-cache 無 強制向源服務(wù)器再次驗證
no-store 無 不緩存請求或響應(yīng)的任何內(nèi)容
3.3.2 Connection
- 控制代理不再轉(zhuǎn)發(fā)的首部字段
- 管理持久連接
- 控制代理不再轉(zhuǎn)發(fā)的首部字段
3.3.3 Upgrade
指定一個完全不同的通信協(xié)議。
3.4 請求首部字段
3.4.1 Accept
Accept 首部字段可通知服務(wù)器,用戶代理能夠處理的媒體類型及媒體類型的相對優(yōu)先級。
- 文本文件
text/html, text/plain, text/css ...
application/xhtml+xml, application/xml ... - 圖片文件
image/jpeg, image/gif, image/png ... - 視頻文件
video/mpeg, video/quicktime .
3.4.2 If-Match
形如 If-xxx 這種樣式的請求首部字段,都可稱為條件請求。服務(wù)器接收到附帶條件的請求后,只有判斷指定條件為真時,才會執(zhí)行請求。
If-Match 與 ETag 一致,服務(wù)器才接受請求。If-None-Match 則相反
3.4.3 If-Modified-Since
如果在 If-Modified-Since 字段指定的日期時間后,資源發(fā)生了更新,服務(wù)器會接受請求
If-Unmodified-Since 則相反
3.4.4 User-Agent
首部字段 User-Agent 會將創(chuàng)建請求的瀏覽器和用戶代理名稱等信息傳達給服務(wù)器。
3.5 響應(yīng)首部字段
3.5.1 ETag
首部字段 ETag 能告知客戶端實體標識。它是一種可將資源以字符串形式做唯一性標識的方式。服務(wù)器會為每份資源分配對應(yīng)的 ETag 值。
3.5.2 Location
使用首部字段 Location 可以將響應(yīng)接收方引導至某個與請求 URI 位置不同的資源。
該字段會配合 3xx :Redirection 的響應(yīng),提供重定向的 URI。
3.5.2 Server
首部字段 Server 告知客戶端當前服務(wù)器上安裝的 HTTP 服務(wù)器應(yīng)用程序的信息。
3.6 實體首部字段
3.6.1 Content-Type
首部字段 Content-Type 說明了實體主體內(nèi)對象的媒體類型。
3.6.2 Expires
首部字段 Expires 會將資源失效的日期告知客戶端。
3.6.3 Last-Modified
首部字段 Last-Modified 指明資源最終修改的時間。
3.6.4 Set-Cookie
當服務(wù)器準備開始管理客戶端的狀態(tài)時,會事先告知各種信息。
3.6.5 Cookie
首部字段 Cookie 會告知服務(wù)器,當客戶端想獲得 HTTP 狀態(tài)管理支持時,就會在請求中包含從服務(wù)器接收到的 Cookie。
3.6.6 X-XSS-Protection
首部字段 X-XSS-Protection 屬于 HTTP 響應(yīng)首部,它是針對跨站腳本攻擊(XSS)的一種對策,用于控制瀏覽器 XSS 防護機制的開關(guān)。
四、HTTP VS HTTPS
4.1、HTTP的缺點
- 通信使用明文(不加密),內(nèi)容可能會被竊聽
- 不驗證通信方的身份,因此有可能遭遇偽裝
- 無法證明報文的完整性,所以有可能已遭篡改
4.2 HTTPS的缺點
- HTTPS 比 HTTP 要慢 2 到 100 倍;
- 需要購買證書
五、web的攻擊技術(shù)
5.1 跨站腳本攻擊
- 特點:
能注入惡意的HTML/JavaScript代碼到用戶瀏覽的網(wǎng)頁上,從而達到Cookie資料竊取、會話劫持、釣魚欺騙等攻擊。 - 原因:
a:Web瀏覽器本身的設(shè)計不安全。瀏覽器能解析和執(zhí)行JS等代碼,但是不會判斷該數(shù)據(jù)和程序代碼是否惡意。
b:輸入和輸出是Web應(yīng)用程序最基本的交互,而且網(wǎng)站的交互功能越來越豐富。如果在這過程中沒有做好安全防護,很容易會出現(xiàn)XSS漏洞。 - 防御XSS攻擊
HttpOnly 瀏覽器禁止頁面的JS訪問帶有HttpOnly屬性的Cookie。
輸入檢查 XSS Filter 對輸入內(nèi)容做格式檢查,類似“白名單”,可以讓一些基于特殊字符的攻擊失效。
輸出檢查 在變量輸出到html頁面時,可以使用編碼或轉(zhuǎn)義的方式來防御XSS攻擊
XSS的本質(zhì)是“HTML注入”
5.2 CSRF攻擊跨站請求偽造
本質(zhì):重要操作的所有參數(shù)都是可以被攻擊者猜測到的。攻擊者預(yù)測出URL的所有參數(shù)與參數(shù)值,才能成功地構(gòu)造一個偽造的請求。
- 防御
驗證 HTTP Referer 字段
在請求地址中添加 token 并驗證