HTTP協議那些事

呦_安徒生發表於2019-04-11

HTTP請求模型

HTTP協議那些事

上圖描述的http最最最基本的一個概況

  • 兩個端:客戶端 和 服務端
  • 兩個動作:
    • 客戶端向服務端發起請求(request)
    • 服務端對客戶端進行響應(response)

http協議是一種無狀態協議,它維持不住當前的通訊狀態。 即:客戶端發起請求,服務端響應,這就結束了,這是獨立的一次輪迴,如果想再請求,那麼就會再來一次 請求響應,這兩次輪迴是相互獨立的,互不影響。

瀏覽器行為與http協議

HTTP協議那些事
處理流程:

  1. 輸入網址並回車
  2. 解析域名
  3. 瀏覽器傳送http請求
  4. 伺服器處理請求
  5. 伺服器返回http響應
  6. 瀏覽器處理html頁面
  7. 繼續請求其他資源

總結:

第一步 使用者在瀏覽器輸入網址,對瀏覽器發號指令,帶我去google.com,這樣瀏覽器就接受到了這個指令。

第二步 瀏覽器檢查網路是否通暢,在區域網中,向防火牆或者家用路由器或者閘道器,提交密碼,翻出牆外。這裡所說的牆內就是我們的區域網,牆外則是網際網路。

第三步 google.com這是一個字串,瀏覽器是不認識這個字串的 它需要把這個字串轉化為 IP地址,這個時候它就去請問 DNS 伺服器 ,找到對應的IP地址(Ipv4協議)。google.com相當於是一個名字,除了你自己沒人知道具體地址在哪,而IP地址則是一個具體的門牌號,這樣瀏覽器就知道往哪走了。

第四步 知道了地址,就可以上路了,這裡並不是 直接過去的,它需要多個路由的轉發,類似於快遞的運送

第五步 瀏覽器順著網線 終於到了google的伺服器對應的地址。但是這個地址上有很多的伺服器。也就是圖4上描述的一棵樹上站了很多隻鳥?。一隻鳥?就代表一個伺服器,也就是說這麼多伺服器有一個共同的出口,即這個ip地址,這些伺服器怎麼公用了一個ip地址這就涉及到了反向代理,後續解釋。反向代理幫你指定到你想要訪問的伺服器,到此為止,request請求就結束了

第六步 伺服器處理請求,處理業務邏輯,處理完的資料返回給瀏覽器,這個過程就是response。

最後 瀏覽器將獲得的資料 進行一系列的處理 整合渲染之後返回給使用者

什麼是HTTP協議

HTTP是超文字傳輸協議,從www瀏覽器傳輸到本地瀏覽器的一種傳輸協議,網站是基於HTTP協議的,例如網站的圖片、css、js等都是基於http協議進行傳輸的

http協議是由從客戶端到伺服器的請求和從伺服器到客戶端的響應進行的約束和規範,大家需要遵守的一種規範

http 協議主要是通過 request請求和 response 這兩個動作進行約束的

瞭解TCP/IP協議棧

協議棧是分層的 下圖中 左圖為 ISO/OSI 協議 這是一種建議規範 右圖為TCP/IP協議 這是一種事實協議

  1. 應用層 為使用者提供所需要的各種服務,例如:HTTP、FTP、DNS等等
  2. 傳輸層 為應用層實體提供端到端的通訊功能,保證資料包的順序傳送以及資料的完整性 TCP 傳輸控制協議,維持通訊狀態 UDP 使用者資料包協議
  3. 網路層 分配ip地址,PPP協議,建立通訊鏈路
  4. 資料鏈路層 物理層上傳輸的訊號
  5. 物理層 看到見摸得著的硬體,網線,還有一些看不見摸不著的載體 無線電波

HTTP協議那些事

http協議屬於應用層,在TCP/IP協議之上,HTTP協議 與HTTPS協議大部分是相同的,區別在於 https 在應用層中多新增了加密協議,如果按照ISO/OSI協議的話,也就是加在了表示層和會話層中。http預設埠是80,https預設埠是443

HTTP的工作過程

一次HTTP操作稱為一個事務

事務是由若干個步驟構成的,這些若干個步驟必須嚴格的按照一定的順序去執行,並且其中的一個步驟失敗了,那麼整個事情就失敗了。

http 操作過程分為四步:

  1. 首先客戶機與伺服器需要建立連結(在 TCP層次)。只要點選某個超級連結,http的工作開始。
  2. 建立連線後,客戶機傳送一個請求給伺服器,請求方式的格式為:統一資源識別符號(URL)、協議版本號,後邊是MIME資訊包括請求修飾符、客戶機資訊和可能的內容。 這一步是 http層面上的 request
  3. 伺服器接到請求後,給予相應的響應資訊,其格式為一個狀態行,包括資訊的協議版本號、一個成功或錯誤的程式碼,後邊是MIME資訊包括伺服器資訊、實體資訊和可能的內容。 這一步是http層面上的response
  4. 客戶端接受伺服器所返回的資訊通過瀏覽器顯示在使用者的螢幕上,然後客戶機與伺服器斷開連結,這一步驟分為兩層 一層是瀏覽器進行渲染,另一層面是在TCP層面上與伺服器斷開連結

請求和響應

  • HTTP請求組成:請求行、訊息報頭、請求正文
  • HTTP響應組成:狀態行、訊息報頭、響應正文
  • 請求行組成:以一個方法符號開頭,後面跟著請求的URL和協議的版本。
  • 狀態行組成:伺服器HTTP協議的版本,伺服器返回的響應狀態碼和狀態碼的文字描述

請求

HTTP協議那些事

HTTP協議那些事

響應

HTTP協議那些事

請求方法

  • GET 請求獲取Request-URI所標識的資源
  • POST 在Request-URI所標識的資源後附加新的資料
  • HEAD 請求獲取由Request-URI所標識的資源的響應訊息報頭
  • PUT 請求伺服器儲存一個資源,並用Request-URI作為其標識
  • DELETE 請求伺服器刪除Request-URI所標識的資源
  • TRACE 請求伺服器回送收到的請求資訊,主要用於測試或診斷
  • CONNECT HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。
  • OPTIONS 請求查詢伺服器的效能,或者查詢與資源相關的選項和需求

HTTP狀態碼

狀態程式碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

1xx:指示資訊--表示請求已接收,繼續處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--要完成請求必須進行更進一步的操作

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

5xx:伺服器端錯誤--伺服器未能實現合法的請求

常用的請求報頭

  • Accept請求報頭域用於指定客戶端接受哪些型別的資訊。eg:Accept:image/gif,Accept:text/

  • htmlAccept-Charset請求報頭域用於指定客戶端接受的字符集。

  • Accept-Encoding:Accept-Encoding請求報 頭域類似於Accept,但是它是用於指定可接受的內容編碼。

  • Accept-Language請求報頭域類似於Accept,但是它是用於指定一種自然語言。

  • Authorization請求報頭域主要用於證明客戶端有權檢視某個資源。當瀏覽器訪問一個頁面時,如果收到服 務器的響應程式碼為401(未授權),可以傳送一個包含Authorization請求報頭域的請求,要求伺服器對其進 行驗證。

  • Host請求報頭域主要用於指定被請求資源的Internet主機和埠號,它通常從HTTP URL中提取出來的,發 送請求時,該報頭域是必需的。

  • User-Agent請求報頭域允許客戶端將它的作業系統、瀏覽器和其它屬性告訴伺服器。

常用的響應報頭

  • Location響應報頭域用於重定向接受者到一個新的位置。Location響應報頭域常用在更換域名的時候
  • Server響應報頭域包含了伺服器用來處理請求的軟體資訊。與User-Agent請求報頭域是相對應的。
  • WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應訊息中,客戶端收到401響應訊息時候,併傳送Authorization報頭域請求伺服器對其進行驗證時,服務端響應報頭就包含該報頭域。

常用的實體報頭

請求和響應訊息都可以傳送一個實體。一個實體由實體報頭域和實體正文組成,但並不是說實體報頭域和實體正文要在一起傳送,可以只傳送實體報頭域。實體報頭定義了關於實體正文(eg:有無實體正文)和請求所標識的資源的元資訊。

  • Content-Encoding實體報頭域被用作媒體型別的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得Content-Type報頭域中所引用的媒體型別,必須採用相應的解碼機制。
  • Content-Language實體報頭域描述了資源所用的自然語言。
  • Content-Length實體報頭域用於指明實體正文的長度,以位元組方式儲存的十進位制數字來表示。
  • Content-Type實體報頭域用語指明傳送給接收者的實體正文的媒體型別。
  • Last-Modified實體報頭域用於指示資源的最後修改日期和時間。
  • Expires實體報頭域給出響應過期的日期和時間。

關於報頭這篇文章講的很清楚,點此連結

cookies與session

  • cookie是儲存在客戶端的 而session 是儲存在服務端的
  • 當客戶端每次傳送URL請求時,cookie的內容都會附加在請求頭上
  • Session則儲存在伺服器端,通過唯一的值sessionID來區別每一個使用者。SessionID隨每個連線請求傳送到伺服器,伺服器根據sessionID來識別客戶端,再通過session 的key獲取session值。

cookie 的使用

HTTP協議那些事

1)Cookie:客戶端將伺服器設定的Cookie返回到伺服器; 2)Set-Cookie:伺服器向客戶端設定Cookie;

伺服器在響應訊息中用Set-Cookie頭將Cookie的內容回送給客戶端,客戶端在新的請求中將相同的內容攜帶在Cookie 頭中傳送給伺服器。從而實現會話的保持。

session 的使用

HTTP協議那些事

HTTP快取機制

HTTP協議那些事

  • 快取會根據請求儲存輸出內容的副本,例如html頁面,圖片,檔案,當下一個請求來到的時候:如果是相同的URL,快取直接使用副本響應訪問請求,而不是向源伺服器再次傳送請求。
  • 快取的優點:減少相應延遲 減少網路頻寬消耗

兩種快取策略;

  • Etag/If-None-Match策略
  • Last-Modified/If-Modified-Since策略

快取流程:

HTTP協議那些事

HTTP協議那些事

https協議分析

  • 採用非對稱加密手段,數字證書策略 CA
  • HTTPS協議、SSL協議、TLS協議、握手協議的關係
    • HTTPS是Hypertext Transfer Protocol over Secure Socket Layer的縮寫,即HTTP over SSL,可理解為基於SSL的HTTP協議。HTTPS協議安全是由SSL協議實現的。
    • SSL協議是一種記錄協議,擴充套件性良好,可以很方便的新增子協議,而握手協議便是SSL協議的一個子協議
    • TLS協議是SSL協議的後續版本,本文中涉及的SSL協議預設是TLS協議1.2版本

http2 協議分析

  • 使用二進位制格式傳輸,更高效、更緊湊
  • 對報頭壓縮,降低開銷。
  • 多路複用,一個網路連線實現並行請求
  • 伺服器主動推送,減少請求的延遲
  • 預設使用加密

HTTP協議那些事

瞭解HTTP3

  • 由google 創造 原名叫 HTTP-over-QUIC
  • 基於 QUIC協議
  • HTTP3 不是http2的擴充套件
  • HTTP3 將是一個全新的協議 目前處於測試階段

HTTP與反向代理

HTTP協議那些事
正向代理: 客戶端——》區域網內 —proxy—》 網際網路 反向代理: 網際網路 —proxy—》伺服器

反向代理的作用:

  • 加密和SSL加速
  • 負載均衡
  • 快取靜態內容
  • 壓縮
  • 減速上傳
  • 安全
  • 外網釋出
    HTTP協議那些事

相關文章