圖解HTTP----讀書筆記


HTTP的歷史

3 項 WWW 構建技術,分別是:把 SGML(Standard Generalized Markup Language,標准通用標記語言)作為頁面的文本標記語言的

                                                      HTML(HyperText Markup Language,超文本標記語言);作為文檔傳遞協議的 HTTP ; 指定文檔所在地址的

                                                      URL(Uniform Resource Locator,統一資源定位符)


HTTP/0.9 HTTP 於1990 年問世。那時的 HTTP 並沒有作為正式的標准被建立。現在的 HTTP 其實含有 HTTP1.0 之前版本的意思,因此被稱為HTTP/0.9。

HTTP/1.0 HTTP 正式作為標准被公布是在 1996 年的 5 月,版本被命名為HTTP/1.0,並記載於 RFC1945。雖說是初期標准,但該協議標准至今仍被廣泛使用在服務器端。

HTTP/1.1 1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 協議版本。當初的標准是 RFC2068,之后發布的修訂版 RFC2616 就是當前的最新版本。

HTTP/2.0 主要技術方向

 

 

TCP/IP

TCP/IP的分層管理

應用層:決定了向用戶提供應用服務時通信的活動。TCP/IP 協議族內預存了各類通用的應用服務。比如,FTP(FileTransfer Protocol,文件傳輸協議)和 DNS(Domain Name System,域名系統)服務就是其中兩類。HTTP 協議也處於該層。

傳輸層:傳輸層對上層應用層,提供處於網絡連接中的兩台計算機之間的數據傳輸。在傳輸層有兩個性質不同的協議:TCP(Transmission ControlProtocol,傳輸控制協議)和 UDP(User Data Protocol,用戶數據報協議)。

網絡層:用來處理在網絡上流動的數據包。數據包是網絡傳輸的最小數據單位。該層規定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機,並把數據包傳送給對方。與對方計算機之間通過多台計算機或網絡設備進行傳輸時,網絡層所起的作用就是在眾多的選項內選擇一條傳輸路線

數據鏈路層:用來處理連接網絡的硬件部分。包括控制操作系統、硬件的設備驅動、NIC(Network Interface Card,網絡適配器,即網卡),及光纖等物理可見部分(還包括連接器等一切傳輸媒介)。硬件上的范疇均在鏈路層的作用范圍之內

TCP/IP通信傳輸流

 


 


 

 利用 TCP/IP 協議族進行網絡通信時,會通過分層順序與對方進行通信。發送端從應用層往下走,接收端則往應用層往上走。

舉例來說明,首先作為發送端的客戶端在應用層(HTTP 協議)發出一個想看某個 Web 頁面的 HTTP 請求。

接着在傳輸層(TCP 協議)把從應用層處收到的數據(HTTP 請求報文)進行分割,並在各個報文上打上標記序號及端口號后轉發給網絡層。

在網絡層(IP 協議),增加作為通信目的地的 MAC 地址后轉發給鏈路層。

接收端的服務器在鏈路層接收到數據,按序往上層發送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端發送過來的 HTTP請求

 


 

 

 

發送端在層與層之間傳輸數據時,每經過一層時必定會被打上一個該層所屬的首部信息。反之,接收端在層與層傳輸數據時,每經過一層時會把對應的首部消去。這種把數據信息包裝起來的做法稱為封裝。

負責傳輸的 IP 協議

IP 協議的作用是把各種數據包傳送給對方。而要保證確實傳送到對方那里,則需要滿足各類條件。其中兩個重要的條件是 IP 地址和 MAC地址(Media Access Control Address)

IP 地址指明了節點被分配到的地址,MAC 地址是指網卡所屬的固定地址。IP 地址可以和 MAC 地址進行配對。IP 地址可變換,但 MAC地址基本上不會更改。使用 ARP 協議憑借 MAC 地址進行通信IP 間的通信依賴 MAC 地址。

在網絡上,通信的雙方在同一局域網(LAN)內的情況是很少的,通常是經過多台計算機和網絡設備中轉才能連接到對方。而在進行中轉時,會利用下一站中轉設備的 MAC地址來搜索下一個中轉目標。這時,會采用 ARP 協議(AddressResolution Protocol)。ARP 是一種用以解析地址的協議,根據通信方的 IP 地址就可以反查出對應的 MAC 地址---------這種機制稱為路由選擇

 

TCP 協議

 

 TCP 位於傳輸層,提供可靠的字節流服務。所謂的字節流服務(Byte Stream Service)是指,為了方便傳輸,將大塊數據分割成以報文段(segment)為單位的數據包進行管理

 為了准確無誤地將數據送達目標處,TCP 協議采用了三次握手

 

 

握手過程中使用了 TCP 的標志(flag) —— SYN(synchronize) 和ACK(acknowledgement)

發送端首先發送一個帶 SYN 標志的數據包給對方。接收端收到后,回傳一個帶有 SYN/ACK 標志的數據包以示傳達確認信息。最后,發送端再回傳一個帶 ACK 標志的數據包,代表“握手”結束。若在握手過程中某個階段莫名中斷,TCP 協議會再次以相同的順序發送相同的數據包

各種協議與 HTTP 協議的關系

 

 

 

URL(UniformResource Locator,統一資源定位符)URL 正是使用 Web 瀏覽器等訪問 Web 頁面時需要輸入的網頁地址

 URI(統一資源標識符):URI 就是由某個協議方案表示的資源的定位標識符。協議方案是指訪問資源所使用的協議類型名稱

 

 

HTTP/1.0 和 HTTP/1.1 支持的方法

 

 

持久連接

 HTTP/1.1 和一部分的 HTTP/1.0 想出了持久連接(HTTP Persistent Connections,也稱為 HTTP keep-alive 或HTTP connection reuse)的方法。持久連接的特點是,只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態

 

 

 

管線化 

持久連接使得多數請求以管線化(pipelining)方式發送成為可能。從前發送請求后需等待並收到響應,才能發送下一個請求。管線化技術出現后,不用等待響應亦可直接發送下一個請求

 

 

 

Cookie管理

 


 

 

 

 

 

HTTP報文

HTTP 報文大致可分為報文首部和報文主體兩塊。兩者由最初出現的空行(CR+LF)來划分。通常,並不一定要有報文主體

 

 

編碼提升傳輸速率

-報文(message)是 HTTP 通信中的基本單位,由 8 位組字節流(octet sequence,其中 octet 為 8 個比特)組成,通過 HTTP 通信傳輸。

-實體(entity)作為請求或響應的有效載荷數據(補充項)被傳輸,其內容由實體首部和實體主體組成。

HTTP 報文的主體用於傳輸請求或響應的實體主體。

壓縮傳輸的內容編碼

常用的內容編碼有以下幾種
gzip(GNU zip)
compress(UNIX 系統的標准壓縮)
deflate(zlib)
identity(不進行編碼)

 

分割發送的分塊傳輸編碼

 

 

4 種 HTTP 首部字段類型

通用首部字段(General Header Fields)
請求報文和響應報文兩方都會使用的首部。

請求首部字段(Request Header Fields)
從客戶端向服務器端發送請求報文時使用的首部。補充了請求的附加
內容、客戶端信息、響應內容相關優先級等信息。

響應首部字段(Response Header Fields)
從服務器端向客戶端返回響應報文時使用的首部。補充了響應的附加
內容,也會要求客戶端附加額外的內容信息。

實體首部字段(Entity Header Fields)
針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更
新時間等與實體有關的信息。

 

 

 

 

HTTPS

HTTP 主要有這些不足,例舉如下

  • 通信使用明文(不加密),內容可能會被竊聽
  • 不驗證通信方的身份,因此有可能遭遇偽裝
  • 無法證明報文的完整性,所以有可能已遭篡改

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


通過和 SSL(Secure Socket Layer,安全套接層)或TLS(Transport Layer Security,安全層傳輸協議)的組合使用,加密 HTTP 的通信內容。用 SSL 建立安全通信線路之后,就可以在這條線路上進行 HTTP通信了。與 SSL 組合使用的 HTTP 被稱為 HTTPS(HTTPSecure,超文本傳輸安全協議)或 HTTP over SSL

 

 

 報文完整性的方法,但事實上並不便捷、可靠。其中常用的是 MD5 和 SHA-1 等散列值校驗的方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM