1. 程式人生 > >你要知道的http

你要知道的http

前言

無論是 C/S 開發還是 B/S 開發,無論是前端開發還是後臺開發,網路總是無法避免的,資料如何傳輸,如何保證正確性和可靠性,如何提高傳輸效率,如何解決會話管理問題,如何在網路擁堵環境下采取措施。這些都是需要了解的。

概要

網路知識我做了 8 個方面的總結,包括DNS協議,HTTP協議,HTTPS協議,TCP協議,IP協議,TCP/IP,Web攻擊,其他協議。以下對這些內容做一些簡單的總結。

1.DNS 協議

作用:提供域名到IP地址之間的解析服務。或逆向從IP地址反查域名的服

2.HTTP協議

2.1 特點

無狀態

使用URI定義網際網路資源

HTTP方法

GET:獲取資源

POST:傳輸實體主體

PUT:傳輸檔案

HEAD:獲得報文首部

DELETE:刪除檔案

OPTIONS:詢問支援的方法

TRACE:追蹤路徑

CONNECT:要求用隧道協議連線代理\n持久連線節省通訊量\n管線化實現並行傳送多個請求,而不需要一個接一個等響應

2.2 HTTP1.1 和HTTP1.0的區別

可擴充套件性:定義Via頭域,增加版本號的支援

快取

增加對快取的重啟用機制:使用ETag頭域描述一個資源

增加Cache-Control頭域支援可擴充套件的指令集

頻寬優化:允許請求資源的某部分,而不是整個資源

長連線

HTTP/1.0只支援瀏覽器與伺服器保持短暫的連線,瀏覽器的每次請求都要建立一個新的連線。

而HTTP/1.1允許在一個TCP連線上可以傳送多個HTTP請求和響應。HTTP/1.1協議的持續連線有兩種方式,即非流水線方式和流水線方式

非流水線方式的特點是,客戶在收到前一個響應後才能發出下一個請求;

流水線方式的特點是,客戶在收到HTTP的響應報文之前就能接著傳送新的請求報文

2.3 Cookie與Session的區別

存取方式的不同

Cookie中只能保管ASCII字串,假如需求存取Unicode字元或者二進位制資料,需求先進行編碼。Cookie中也不能直接存取Java物件。若要儲存略微複雜的資訊,運用Cookie是比較艱難的。

Session中能夠存取任何型別的資料,包括而不限於String、Integer、List、Map等。Session中也能夠直接保管Java Bean乃至任何Java類,物件等,運用起來十分便當。能夠把Session看做是一個Java容器類。

隱私策略的不同

Cookie儲存在客戶端閱讀器中,對客戶端是可見的,客戶端的一些程式可能會窺探、複製以至修正Cookie中的內容。

Session儲存在伺服器上,對客戶端是透明的,不存在敏感資訊洩露的風險。

有效期上的不同

Cookie的過期時間指定

Session依賴於名為JSESSIONID的Cookie,而Cookie JSESSIONID的過期時間默許為–1,只需關閉了瀏覽器該Session就會失效,因而Session不能完成資訊永世有效的效果。

伺服器壓力的不同

Cookie保管在客戶端,不佔用伺服器資源。假如併發閱讀的使用者十分多,Cookie是很好的選擇。關於Google、Baidu、Sina來說,Cookie或許是唯一的選擇。

Session是保管在伺服器端的,每個使用者都會產生一個Session。假如併發訪問的使用者十分多,會產生十分多的Session,耗費大量的記憶體。因而像Google、Baidu、Sina這樣併發訪問量極高的網站,是不太可能運用Session來追蹤客戶會話的。

瀏覽器支援的不同

Cookie是需要客戶端瀏覽器支援的。

假如客戶端瀏覽器不支援Cookie,

運用Session以及URL地址重寫。

跨域支援上的不同

Cookie支援跨域名訪問,例如將domain屬性設定為“.為“.biaodianfu.com”,則以”,則以“.以“.biaodianfu.com”為字尾”為字尾的一切域名均能夠訪問該Cookie。跨域名Cookie如今被普遍用在網路中,例如Google、Baidu、Sina等。

Session則不會支援跨域名訪問。Session僅在他所在的域名內有效。

2.4 電腦訪問網頁的過程

用到的協議:DNS、HTTP、OSPF、IP、ARP

過程描述

DNS把域名解析成對應的IP

傳送一次請求,伺服器返回一個永久重定向響應,這樣瀏覽器就知道要訪問的正確網址

傳送請求html的請求,這個連線過程基於TCP/IP三次握手四次揮手的,建立連線

伺服器返回一個html響應

瀏覽器根據渲染引擎解析返回的html響應,呈現內容

繼續傳送內嵌在html檔案其他資源的請求,比如css、js、圖片資源等

載入整個頁面

2.5 Ping

同網段

主機A要去Ping主機B, 主機A會封裝兩層報文,主機A先檢查自己MAC地址中是否有B的MAC地址,如果沒有就向外傳送一個ARP廣播包

交換機收到這個ARP後,會檢查在交換機中是否包含B的MAC地址,如果有就直接返回給A;如果沒有就向所有埠傳送ARP,該網段的主機的MAC如果與B的MAC地址不同就丟棄,如果主機B收到了該ARP就馬上返回相同格式的ARP

這時主機A已經有了B的MAC地址,就把B的MAC地址封裝到ICMP報中,向主機B傳送一個回顯請求

主機B收到該報文後,知道是主機A的一個回顯請求,就會返回一個相同格式的報文。這樣就完成了同一個網段的Ping的過程

不同網段

主機A要去Ping一個不同網段的主機C,主機A會去找閘道器轉發

如果主機A不知道閘道器的MAC地址,就會發送一個ARP廣播一下,這樣就知道了閘道器的MAC地址

閘道器收到主機A的ICMP報文,根據上面的目的IP,會去查詢路由表,找到一個出口指標,給主機C傳送一個ICMP報文

如果閘道器不知道主機C的MAC地址,就會給閘道器內所有的主機發送一個ARP,從而找到主機C的MAC地址

主機C收到主機A的報文就會給主機A傳送一個回顯請求。這樣就完成了不同網段的Ping的請求

2.6 路由器與交換機的區別

路由器包含了交換機的功能,交換機主要的作用是擴充套件介面

2.7 websocket

全雙工通訊

特點

推送功能:支援伺服器向客戶端推送資料的推送功能

減少通訊量:一直保持連線

HTTP連線建立後,需要完成一次握手動作

握手—請求:用到HTTP的upgrade欄位告知伺服器通訊協議發生變化

握手—響應:對於之前的請求返回狀態碼101 switching protocols

成功握手確立WebSocket連線之後,通訊不再使用HTTP的資料幀,而採用WebSocket獨立的資料幀

3. HTTPS協議

3.1 HTTP缺點

通訊使用明文可能會被竊聽

解決方式

通訊加密。SSL和TLS組合使用

內容加密

不驗證通訊方身份就可能遭遇偽裝

解決方式:查明對手的證書

無法證明報文完整性,可能已遭篡改

數字簽名,MD5並不可靠,應用HTTPS

HTTP+加密+認證+完整性保護=HTTPS

4. TCP協議

4.1 三次握手

傳送端髮帶SYN標誌的資料包給對方。

接收端收到後,回傳一個帶有SYN/ACK標誌的資料包以示傳達確認資訊。

最後,傳送端再回傳一個帶ACK標誌的資料包,代表“握手”結束

握手某個階段中斷,TCP會以相同的順序傳送相同的資料包

4.2 四次揮手

客戶端A傳送一個FIN,用來關閉客戶A到伺服器B的資料傳送。

伺服器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將佔用一個序號。

伺服器B關閉與客戶端A的連線,傳送一個FIN給客戶端A。

客戶端A發回ACK報文確認,並將確認序號設定為收到序號加1。

4.3 流量控制

TCP接收端對傳送端傳送多少位元組的資料進行控制,防止接收端處理不及而丟失資料

傳送視窗的大小是受到接收視窗的控制的。

傳送視窗必須根據接收端的大小及時調整發送視窗的大小,這個機制保證了每次TCP傳輸的資料量都是接收端可以及時處理的。

4.4 差錯控制

保證接收端接收的資料是完整未受損傷的,是可靠性的重要保證。

主要使用校驗和、確認、超時重傳這三個工具進行差錯控制。

4.5 擁塞控制

擁塞視窗

傳送方的視窗大小是接收視窗與擁塞視窗中的較小值。

擁塞視窗的大小又取決於網路的擁塞狀況。

擁塞策略

慢開始

擁塞避免

擁塞檢測

擁塞控制流程

由於剛開始不清楚網路的擁塞情況,所以會首先採用慢開始演算法,開始階段,視窗大小由1指數增大,直到視窗大小到達門限值。

視窗大小到達門限值後,就開始執行擁塞避免演算法,之後視窗值按照線性規律增大,直到出現超時或者到達最大的視窗大小值。

這個時候,會開始執行擁塞檢測演算法,也就是把門限值變為視窗大小的一半,之後繼續執行擁塞避免演算法,視窗大小按照線性規律增大。