HTTP協議入門

序言

在學習Http的時候,走了很多彎路,開始覺得是簡單的百度出來,看看別人的博客就好了,結果發現基本上都是第三手、第四手資源,裏面講的東西仍是停留於幾年前,這讓我這個小白無從下手,最終直接去了MDN官網翻翻東西。git

Http簡介

Http又稱超文本傳輸協議,是用於傳輸例如HTML的超媒體文檔的應用層協議,主要用於瀏覽器與web服務器之間的通訊。HTTP是無狀態協議,即服務器不會在兩次請求之間保留任何數據,但使用Cookies能夠建立有狀態的會話。。 github

Http協議流程圖
客戶端和服務端經過交換各自的消息(與數據流正好相反)進行交互。由像瀏覽器這樣的客戶端發出的消息叫作 requests,被服務端迴應的消息叫作 responses。web

TCP/IP 三次握手

HTTP 的傳輸協議是 TCP/IP 協議,該協議鏈接是須要進行三次握手的。
大白話
TCP/IP三次握手瀏覽器

那麼爲何須要三次握手?這裏引用知乎上的一個回答: 緩存

這個問題的本質是, 信道不可靠, 可是通訊雙發須要就某個問題達成一致. 而要解決這個問題, 不管你在消息中包含什麼信息, 三次通訊 是理論上的最小值. 因此三次握手不是TCP自己的要求, 而是爲了知足"在不可靠信道上可靠地傳輸信息"這一需求所致使的. 請注意這裏的本質需求,信道不可靠, 數據傳輸要可靠. 三次達到了, 那後面你想接着握手也好, 發數據也好, 跟進行可靠信息傳輸的需求就不要緊了. 所以,若是信道是可靠的, 即不管何時發出消息, 對方必定能收到, 或者你不關心是否要保證對方收到你的消息, 那就能像UDP那樣直接發送消息就能夠了.服務器

官方語言上的三次握手步驟:網絡

  • 客戶端發送 SYN 報文給服務器端,進入 SYN_SEND 狀態。 —— 客戶端向服務器端發送消息,請求它的迴應。
  • 服務器收到 SYN 報文,迴應一個 SYN ACK 報文,進入 SYN_RECV 狀態。 —— 服務器端收到消息,採起迴應行爲,回覆消息告訴客戶端收到了。
  • 客戶端收到服務器 SYN 報文,迴應一個 ACK 報文,進入鏈接狀態。 —— 客戶端收到消息,這時客戶端收到響應,代表發送的數據有回信了。可是服務器端發送了迴應卻還不知道客戶端有沒有收到。這時客戶端須要再次發送消息告訴服務器我收到了。服務器收到消息後,客戶端和服務器都知道對方已準備好通信,而後就開始鏈接通信了。

Http的request和response

  1. request
    請求爲客戶端發送給服務器的數據。具體有以下數據:學習

    • 請求方法:如 GET、 POST 這類請求方法。
    • 要獲取的資源路徑。
    • HTTP協議版本號。
    • Headers:傳遞附加信息。
    • body:若是想 POST 請求,就會傳遞 body 資源數據給服務器。

Http請求

  1. response
    響應爲服務器收到客戶端發送數據返回的數據,具體有以下數據:加密

    • HTTP協議版本號。
    • 狀態碼(status code)。
    • 狀態消息(status message)。
    • Headers:傳遞附加信息。
    • body: 響應返回的資源存在body中。通常返回圖片、HTML等資源。
      Http請求
  2. Headers 頭文件
    頭文件容許客戶端和服務器經過請求和響應傳遞附加信息。
    下面列出一些經常使用的消息頭及其用法:spa

    • Date 信息來源的日期時間
    • Content-Type 指定服務器文檔的MIME類型,幫助用戶代理去處理接收到的數據。
    • Content-Length 表示 body 的字節長度。
    • Host 服務器的域名。
    • User-Agent 能夠用來識別發送請求的瀏覽器,是產品標記符和註釋的清單。
    • Accept 用戶代理指望的MIME類型列表
    • Accept-Encoding 列出用戶代理支持的壓縮方法
    • Accept-Ranges 指望範圍。參數:byte、none。
    • Assess-Control-Allow-Origin 容許組織鏈接控制 。
    • Age 對象在代理緩存中的時間
    • Cache-Control 指定緩存機制
    • Connection 是否保持網絡鏈接打開狀態。參數:keep-alive、close。
    • ETag 特定版本資源標識符
    • Expires 過時時間日期
    • Server 服務器信息,如JSP、Apache等。
    • Referer 可用於識別用戶訪問位置

Https

  1. Http與Https的區別
    Https在傳輸的信息上是通過了加密的,而Http是明文傳輸。
  2. Https運行機制

    • 客戶端發起 HTTPS 請求
    • 服務端獲取數字證書CA —— 服務器向數字證書認證機構申請獲取數字證書 CA 代表服務器是合法的、無害的。
    • 傳送數字證書 —— 將數字證書傳給客戶端
    • 客戶端解析證書 —— 客戶端向數字證書認證機構查詢,驗證服務器合法性。
    • 客戶端傳輸加密後的信息給服務端
    • 服務端解密信息
    • 服務端傳輸加密後的信息給客戶端
    • 客戶端解密信息

參考連接:

  1. Http|MDN https://developer.mozilla.org...
  2. 通俗大白話來理解TCP協議的三次握手和四次分手 https://github.com/jawil/blog...
  3. HTTP 協議學習筆記(掃盲文)https://www.jianshu.com/p/e0a...
相關文章
相關標籤/搜索