圖解HTTP----讀書筆記

来源:https://www.cnblogs.com/tk55/archive/2020/02/04/12259414.html
-Advertisement-
Play Games

HTTP的歷史 3 項 WWW 構建技術,分別是:把 SGML(Standard Generalized Markup Language,標準通用標記語言)作為頁面的文本標記語言的 HTML(HyperText Markup Language,超文本標記語言);作為文檔傳遞協議的 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 等散列值校驗的方法

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • js內置對象:Array String Math Date <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> // 1、構造函數 ...
  • 轉自:將文本定位於div的底部的方法 摘要: 下文講述將文本放於div的底部的兩種方法,如下所示: 實現思路: 思路1:採用絕對定位的方式,將其放置於div的底部 思路2:使用Line-height屬性將文本放置於div的底部 行高大小設置的計算公式:(height-(font-size/2))x2 ...
  • $衝突的解決方案 遇到其他js文件也用$包裝了函數。可以把jQuery放在後面,並釋放下$的控制權,也可以換個字元替代原來的$,例如$$ 或者,jQuery //jQuery釋放$的控制權 $$ = $.noConflict(); <!DOCTYPE html> <html lang="zh-CN" ...
  • javascript 函數 return 後面沒有返回值 代表提早退出語句,return後面的語句都不再執行 此時返回值為undefined <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document< ...
  • each方法 each方法 //each方法 $("li").each(function (index, element) { $(element).css("opacity", (index + 1) / 10); }) for迴圈方法 for (var i = 0; i < $("li").le ...
  • 五角星評分案例 1. 滑鼠經過li的時候,當前的位置是實心五角星,前面的是實心。當前位置後面的是空心。註意此處不能完全用鏈式編程寫到底 2. 滑鼠離開,comment的所有孩子變為空心五角星。額外,找到current, 讓current和它的前面都是實心。 3. 點擊li的時候,當前的位置增加個cu ...
  • if() else if() else() alert() 彈出警告框 prompt() 輸入框,確定:返回輸入信息;取消:返回null <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</t ...
  • 鏈式編程 設置性操作:可以鏈式編程 獲取性操作,不能鏈式,因為獲取性操作,數值,字元串,返回值是不是一個jq對象。 $(function () { //設置性操作:可以鏈式編程 //獲取性操作,不能鏈式,因為獲取性操作,數值,字元串,返回值是不是一個jq對象。 $("div").width(200) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...