1. 程式人生 > 其它 >圖解HTTP~總結

圖解HTTP~總結

<圖解http-第一章>

客戶端 : 通過傳送請求獲取伺服器資源的 Web 瀏覽器

TCP/IP : 網際網路相關的各種協議的總稱 , 層次分別分為以下 4 層:應用層、傳輸層、網路層和鏈路層

  應用層 : 決定了向用戶提供應用服務時通訊的活動 ( HTTP 協議處於該層 )

  傳輸層 : 提供處於網路連線中的兩臺計算機之間的資料傳輸。

  網路層 : 用來處理在網路上流動的資料包

      資料包是網路傳輸的最小資料單位。該層規定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機,並把資料包傳送給對方。

  鏈路層 : 來處理連線網路的硬體部分 ; 硬體上的範疇均在鏈路層的作用範圍之內。

 

TCP 協議採用了三次握手 : 

傳送端首先發送一個帶 SYN 標誌的資料包給對方。

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

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

若在握手過程中某個階段莫名中斷,TCP 協議會再次以相同的順序傳送相同的資料包。

 

DNS : 簡單的說,就是因為一串數字難以記得,然後就用域名,域名就可以用DNS來解析  (提供域名查詢到地址的過程 或 地址查詢到域名的過程)

 

各大協議的關係 : 

 

 

URL : 統一資源定位符 即地址 ( URL 是 URI 的子集 )

RUI : 統一資源標識

符 , 在http請求/響應的時候,會在報文首部(請求行/狀態行出現)

絕對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)的步驟

 

完結 ~ ~