閱讀之圖解HTTP-認識簡單的HTTP協議

HTTP

  • HTTP協議用於客戶端和服務端之間的通訊
  • 經過請求和響應進行通訊,請求由客戶端發出,響應由服務器端回覆
  • 無狀態協議,不保存狀態信息,爲了實現保存狀態信息,引入了cookie
    • 1.客戶端發起第一次請求
    • 2.服務器端,生成Cookie信息,經過set-Cookie首部字段信息,通知客戶端保存Cookie
    • 3.下一次客戶端請求時,客戶端會自動在請求報文上添加Cookie信息
    • 4.服務器端收到,對比服務器上的內容,斷定用戶是誰
  • 持久鏈接:最初HTTP,每進行一次HTTP通訊,就要斷開一次TCP鏈接,HTTP/1.1 引入了持久鏈接keep-alive,若是任意一端沒有明確提出斷開鏈接,則保存TCP鏈接
  • 管線化:之前,發送請求需等待並收到響應以後,才能發送下一個請求,引入管線化技術以後,能夠同時並行發送多個請求,而不須要等待響應了

HTTP報文

HTTP報文大體可分爲報文首部和報文主體部分
報文主體 = 實體主體
實體 = 實體首部 + 實體主體
⚠️報文主體不是必須的,報文主體傳送的內容,是應該被髮送的數據
例如:

  • 1.用戶只是想獲取資源,使用GET方法,請求報文的報文主體就沒有內容了
  • 2.用戶向服務器傳送文件,使用PUT方法,在請求報文的報文主體包含傳送內容
  • 3.服務器返回用戶請求的資源,在響應報文的報文主體中包含請求資源
  • 4.服務器返回304狀態碼時,告訴用戶使用未過時的緩存,響應報文的報文主體爲空

請求報文首部

請求行 = 請求方法 + 請求UR I+ 協議版本號 GET /index.html HTTP/1.1
請求訪問某臺HTTP服務器上的/index.html頁面資源

請求方法

  • GET:獲取資源
  • POST:傳輸請求報文主體,目的不在於獲取響應的報文主體
  • PUT:傳輸文件,在請求報文主體中加入文件內容
  • HEAD:與GET方法同樣,不過不返回報文主體內容
  • DELETE:刪除文件
  • OPTIONS:詢問支持的方法,查詢指定資源支持的方法
  • TRACE:追蹤路徑
  • CONNECT:要求用隧道協議鏈接代理

響應報文首部

狀態行 = 協議版本號 + 狀態碼數值 + 緣由短語 HTTP/1.1 200 OK

狀態碼

狀態碼 = 狀態碼數值 + 緣由短語html

  • 狀態碼類別

    • 1XX:信息性狀態碼--------------接收的請求正在被處理
    • 2XX:成功狀態碼----------------請求正常處理完畢
    • 3XX:重定向狀態碼--------------須要進行附加操做以完成請求
    • 4XX:客戶端錯誤狀態碼---------服務器沒法處理請求
    • 5XX:服務器端錯誤狀態碼-------服務器處理請求出錯
      ⚠️只要遵循狀態碼列表的定義,即便改變RFC2616中定義的狀態碼,或服務器端自行建立狀態碼都沒問題
  • 常見狀態碼

    • 200 OK----------------------------表示服務器端正常處理了客戶端發來的請求
      不過,不一樣的請求方法,會獲得不一樣的結果
      使用GET方法時,對應的請求資源會做爲響應返回;
      使用HEAD方法時,對應資源則不會做爲響應返回,只返回報文首部,服務器被動不返回報文主體
    • 204 NO Content-------------------請求處理成功,但沒有資源返回
      響應報文中不含報文主體,服務器主動不返回報文主體
    • 206 Partial Content----------------客戶端進行了範圍請求
      實際上服務器上成功的執行了GET請求,可是客戶端要求,返回指定範圍內的數據
    • 301 Moved Permanently-----------永久性重定向
      客戶端訪問的資源,被服務器端永久的分配了新的URI(統一資源標識符),此時服務器端在響應報文中添加Location首部字段,客戶端保存提示的URI,自動根據新的URI再次發鬆請求,獲得數據
    • 302 Found-------------------------臨時性重定向
      服務器端臨時移動了資源,服務器帶有新的URI響應,客戶端不保存新的URI,自動根據新的URI發送請求,獲得數據
    • 303 See Other---------------------URI已經更新,明確提示客戶端使用GET方法請求獲取資源
      與301,302對比,301,302 沒有明確指定客戶端下一次的請求方法,
      可是,其實幾乎全部的瀏覽器都會把POST改爲GET,並刪除請求報文中的報文主體部分
    • 304 Not Modified--------------資源已找到,但不符合客戶端傳來的條件
      其實與重定向沒有關係,表示,客戶端直接使用了未過時的緩存
    • 307 Temporary Redirect------臨時重定向
      與302 相同,但307不會改變請求方法
    • 400 Bad Request-------------請求中存在語法錯誤
    • 401 Unauthorized-------------請求中的認證失敗
    • 403 Forbidden----------------服務器端不容許訪問該資源
    • 404 Not Found----------------服務器上沒有該資源,或服務器端拒絕請求且不想說明理由
    • 500 Internal Server Error-------服務器端發生了內部故障
    • 503 Service Unavailable--------服務器暫時處於超負荷或正在進行停機維護狀態
相關文章
相關標籤/搜索