圖解HTTP~總結
<圖解http-第一章>
客戶端 : 通過傳送請求獲取伺服器資源的 Web 瀏覽器
TCP/IP : 網際網路相關的各種協議的總稱 , 層次分別分為以下 4 層:應用層、傳輸層、網路層和鏈路層
應用層 : 決定了向用戶提供應用服務時通訊的活動 ( HTTP 協議處於該層 )
傳輸層 : 提供處於網路連線中的兩臺計算機之間的資料傳輸。
網路層 : 用來處理在網路上流動的資料包
資料包是網路傳輸的最小資料單位。該層規定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機,並把資料包傳送給對方。
鏈路層 : 來處理連線網路的硬體部分 ; 硬體上的範疇均在鏈路層的作用範圍之內。
TCP 協議採用了三次握手 :
傳送端首先發送一個帶 SYN 標誌的資料包給對方。
接收端收到後,回傳一個帶有 SYN/ACK 標誌的資料包以示傳達確認資訊。
最後,傳送端再回傳一個帶 ACK 標誌的資料包,代表“握手”結束。
若在握手過程中某個階段莫名中斷,TCP 協議會再次以相同的順序傳送相同的資料包。
DNS : 簡單的說,就是因為一串數字難以記得,然後就用域名,域名就可以用DNS來解析 (提供域名查詢到地址的過程 或 地址查詢到域名的過程)
各大協議的關係 :
URL : 統一資源定位符 即地址 ( URL 是 URI 的子集 )
RUI : 統一資源標識
絕對URL : 完整的訪問地址
相對URL : 相對當前位置的地址
絕對URI :
登入資訊(認證)
指定使用者名稱和密碼作為從伺服器端獲取資源時必要的登入資訊(身份認證)。此項是可選項。
伺服器地址
使用絕對 URI 必須指定待訪問的伺服器地址。地址可以是類似 hackr.jp 這種 DNS 可解析的名稱,或是 192.168.1.1 這類 IPv4 地址 名,還可以是 [0:0:0:0:0:0:0:1] 這樣用方括號括起來的 IPv6 地址名。
伺服器埠號
指定伺服器連線的網路埠號。此項也是可選項,若使用者省略則自動使用預設埠號。
帶層次的檔案路徑
指定伺服器上的檔案路徑來定位特指的資源。這與 UNIX 系統的檔案目錄結構相似。
查詢字串
針對已指定的檔案路徑內的資源,可以使用查詢字串傳入任意引數。此項可選。
片段識別符號
使用片段識別符號通常可標記出已獲取資源中的子資源(文件內的某個位置)。但在 RFC 中並沒有明確規定其使用方法。該項也為可選項
<圖解http-第二章>
HTTP 協議用於客戶端和伺服器端之間的通訊
HTTP 是一種不儲存狀態,即無狀態(stateless)協議。HTTP 協議自身不對請求和響應之間的通訊狀態進行儲存。也就是說在 HTTP 這個級別,協議對於傳送過的請求或響應都不做持久化處理
Cookie 正因為http是無狀態協議,才有了Cookie技術.有了 Cookie 再用 HTTP 協議通訊,就可以管理狀態了( 後面就用token代替了cookie了 )
客戶端 : 請求訪問文字或影象等資源的一端
服務端 : 提供資源響應的一端
客戶端傳送給某個 HTTP 伺服器端的請求報文中的內容
GET /index.htm HTTP/1.1
Host: hackr.jp
GET 表示請求訪問伺服器的型別,稱為方法
/index.htm 指明瞭請求訪問的資源物件,也叫做請求 URI
HTTP/1.1 即 HTTP 的版本號,用來提示客戶端使用的 HTTP 協議功能。
Host: hackr.jp 請求首部欄位
這段請求內容的意思是:請求訪問某臺 HTTP 伺服器上的 /index.htm 頁面資源
<圖解http-第三章>
HTTP 報文用於 HTTP 協議互動的資訊
請求報文 : 請求端(客戶端)的 HTTP 報文
響應報文 : 響應端(伺服器端)的 HTTP 報文
HTTP 報文 : 報文首部( header )和報文主體( body ) ; 通常不一定有body : get(沒有) post(有)
<圖解http-第四章>
沒有
<圖解http-第五章>
通訊資料轉發程式 :代理、閘道器、隧道
代理
是在客戶端與伺服器之間加一層代理伺服器,客戶端每次訪問時都是訪問的代理伺服器,然後由代理伺服器將請求報文轉發給源伺服器,源伺服器處理完成後將響應傳送給代理伺服器,代理伺服器再返回給客戶端。
這裡代理的作用主要有
①對客戶端請求進行分發;
②快取響應資料;
③獲取訪問日誌等等。
代理和閘道器的主要區別在於,代理只會接收請求報文,但是不會對其做過多處理,然後將其轉發給源伺服器,而閘道器是會對請求做一定的處理的。
閘道器
閘道器是轉發其他伺服器通訊資料的伺服器,接收從客戶端傳送來的請求時,它就像自己擁有資源的源伺服器一樣對請求進行處理。
有時客戶端可能都不會察覺,自己的通訊目標是一個閘道器。
隧道
隧道是在客戶端與伺服器之間建立一條通訊線路,這樣就可以使用SSL等加密手段進行通訊。
隧道的主要目的是確保客戶端與伺服器之間能夠進行安全的通訊。
儲存資源的快取主要有兩種型別:代理伺服器快取和客戶端快取。
兩者之間的作用非常類似,就是在客戶端傳送請求時,首先會檢查客戶端是否有快取,如果有,則直接從客戶端取,如果沒有,則請求代理伺服器,
代理伺服器如果存在快取,則直接返回快取資料,如果不存在,則請求資源伺服器。
這裡需要注意的一個問題是,快取的失效是通過快取設定的時間來控制的,當超過了設定的時間之後,客戶端或者代理伺服器就會將請求發到資源伺服器,從而拉取最新資料,更新快取。
<圖解http-第六章>
http的首部欄位
通用首部欄位
Cache-Control : 控制快取的行為
Cache-Control: private, max-age=0, no-cache
Connection : 逐跳首部,連結管理
Date : 建立報文的日期時間
Pragma : 報文指令
Trailer : 報文末端的首部一覽
Transfer-Encoding : 指定報文主體的傳輸編碼方式
Upgrade : 升級為其他協議
Via : 代理伺服器的相關資訊
Warning : 錯誤通知
請求首部欄位
Accept : 使用者代理可處理的媒體型別
Accept-Charset : 優先的字符集
Accept-Encoding : 優先的內容編碼
Accept-Language : 優先的語言
Authorization : Web認證資訊
Expect : 期待伺服器的特點行為
From : 使用者的電子郵件地址
Host : 請求資源所在伺服器
If-Match : 比較實體標記
If-Modified-Since : 比較資源的更新時間
If-Range : 資源未更新時傳送實體Byte的範圍請求
If-Unmodified-since : 比較資源的更新時間
Max-Forwards : 最大傳輸逐跳數
Proxy-Authorization : 代理伺服器要求客戶端的認證資訊
Range : 實體的位元組範圍請求
Referer : 對請求中URL的原始獲取方
TE : 傳輸編碼的優先順序
User-Agent : HTTP客戶端程式的資訊
響應首部欄位
Accept-Ranges : 是否接受位元組範圍請求
Age : 推算資源建立經過時間
ETag : 資源的匹配資訊
Location : 令客戶端重定向至指定URI
Proxy-Authenticate : 代理伺服器對客戶端的認證資訊
Retry-After : 對再次發起請求的時機要求
Server : HTTP伺服器的安裝資訊
Vary : 代理伺服器快取的管理資訊
WWW-Autehnticate : 伺服器對客戶端的認證資訊
實體首部欄位
Allow : 資源可支援的HTTP方法
Content-Encoding : 實體主體適用的編碼方式
Content-Language : 實體主體的自然語言
Content-Length : 實體主體的大小
Content-Location : 替代對應資源的URI
Content-MD5 : 實體主體的報文摘要
Content-Range : 實體主體的位置範圍
Content-Type : 實體主體的媒體型別
Expires : 實體主體過期的日期時間
Last-Modified : 資源的最後修改日期時間
<圖解http-第七章>
http的不足 :
• 通訊使用明文(不加密),內容可能會被竊聽
• 不驗證通訊方的身份,因此有可能遭遇偽裝
• 無法證明報文的完整性,所以有可能已遭篡改
與 SSL 組合使用的 HTTP 被稱為 HTTPS
HTTP+ 加密 + 認證 + 完整性保護 =HTTPS
<圖解http-第八章>
沒有
<圖解http-第九章>
WebSocket協議是基於HTTP協議的,連線的發起方仍然是客戶端,一旦建立了通訊連線,雙方可互相傳送報文
主要特點 :
推送功能
支援由伺服器向客戶端推送資料的推送功能。這樣,伺服器可直接傳送資料,而不必等待客戶端的請求。
減少通訊量
只要建立起 WebSocket 連線,就希望一直保持連線狀態。和 HTTP 相比,不但每次連線時的總開銷減少,而且由於 WebSocket 的首部資訊很小,通訊量也相應減少了。
為了實現 WebSocket 通訊,在 HTTP 連線建立之後,需要完成一次“握手”(Handshaking)的步驟。
完結 ~ ~