HTTP基礎概念

CWLIN發表於2019-05-03

序言

本文主要通過HTTP 報文,講解HTTP Header,Methods,status code

HTTP

HTTP基於TCP協議實現,TCP是一條雙向通訊通道,HTTP在TCP的基礎上規定了Request->Response的模式;也就是說:必須由瀏覽器首先發起請求,伺服器才會響應。 HTTP是一個純粹的文字協議,它規定了使用TCP協議來傳輸文字格式的一個應用協議,具體可以參考一下計算機網路的五層協議。

名詞解釋

URL:統一資源定位符——定位到位置 如:www.baidu.com/
URI:統一資源標記符——定位到名字 如:www.baidu.com/index.html URI = URL (www.baidu.com/) + URN (index.html)

Request->Response「請求->響應」

http通訊中,必須由客服端發起請求,服務端才能響應。

Request 請求報文

method -> 請求方式「GET POST OPTIONS ...」 path -> 獲取資源的路徑 version -> 請求版本 「HTTP的協議版本號」 headers -> 頭部 「cookies...」 body -> 請求主體 「主要提交的一些資料」

HTTP基礎概念

Response 響應報文

version -> 響應協議版本號 status -> 狀態碼「200 404 403... 用來反饋請求的成功失敗已經原因」 headers -> 頭部跟請求頭類似 「cookies...」 body -> 響應的一些資源資訊

HTTP基礎概念

幾個重點結構

HTTP Method(方法)

http method定義了我們請求希望執行的操作型別,主要有以下幾種:

  • GET get「獲取」是一種最常用的請求方式,一般用來直接通URI訪問來獲取資源。譬如:獲取html程式碼,圖片,JSON等資源

  • POST post「提交」也是一個更常用的方式,主要用來提交表單資訊給後臺儲存修改驗證。譬如:提交使用者名稱與密碼驗證身份

  • HEAD 跟get相同,不過只返回請求頭多數由 JavaScript 發起

  • PUT && DELETE 新增跟刪除資源

  • CONNECT 用於 HTTPS和 WebSocket

  • OPTIONS && TRACE 用於預請求和除錯,後面會講到

狀態碼 State code

這部分很重要,在開發除錯中,往往需要根據狀態碼判斷bug出現的原因,下面挑幾個重要的講一下:

  • 1xx 資訊響應 用處不大

  • 2xx 成功響應 200 OK 請求成功 201 Created 建立成功 -> 一般是在傳送PUT「新增」請求後的響應 202 Accepted 請求已收到 -> 你的請求我已經收到了但我不還不想處理 ...

  • 3xx 重定向 301 Moved Premanently 資源已經永久轉移了 302 Found 臨時從其他URI 響應資訊 304 Not Modified 本地有快取版本並且沒有過期

  • 4xx 客戶端響應 這些狀態主要是客戶端傳送的請求不符合服務端的規格要求,返回的狀態資訊 400 Bad Request 錯誤請求 -> 這個請求我不知道你在說什麼 401 Unathorized 未授權 -> 這個請求你需要提交使用者驗證資訊「Authorization」 403 Forbidden 請求是對但拒絕執行,具體原因不知「傲嬌臉」 404 Not Found 請求的資源不存在 405 Method Not Allowed 請求方式拒絕 -> 這個請求方式「如:post」不允許

  • 5xx 服務端響應 這些狀態主要是服務端自己發生錯誤 500 Internal Server Error 服務端錯誤 -> 服務端出錯具體原因不清楚 502 Bad Gateway 閘道器出錯 503 Service Unavailable 伺服器掛了 504 Gateway Timeout 響應超時了 505 HTTP Version Not Supported 你這個請求協議我不支援啊

HTTP Header(HTTP頭)

HTTP基礎概念
HTTP基礎概念
格式:「名稱(不區分大小寫)」: 「具體的值」 幾個常見的:

  • Accept-Encoding/Content-Encoding允許/返回的資料壓縮方式 有一次業務上線後測試工程師告訴我網頁開啟太慢了,檢視了network後發現打包庫好幾M,但是用本地編譯測試沒有也就幾百K而已。後來通過查詢content-encoding發現線上nginx沒有配置gzip壓縮

  • Access-Control-Allow-Methods 預請求允許返回的請求方式 當發生405錯誤的時候,可以查詢伺服器允許你請求的方式有哪些

  • Access-Control-Allow-Origin 允許誰訪問,萬用字元 '*' 當發生跨域的時候,一般是這個沒有設定

  • Authorization 傳送驗證資訊 一般在返回401的時候,就是沒有設定這個

  • Content-Type 實體頭部用於指示資源的MIME型別 media type 格式:type/subtype 「型別」/「子型別」

獨立型別:

text: 表示可讀文字常見 text/plain「未知可直接展示」, text/html, text/css, text/javascript, text/xml
image:影像 ...
audio:音訊 ...
video:視訊 ...
applcation: 二進位制資料 常見 application/json 表示資料是json格式的
複製程式碼

對於text檔案型別若沒有特定的subtype,就使用 text/plain。類似的,二進位制檔案沒有特定或已知的 subtype,即使用 application/octet-stream。

Multipart 型別:

Multipart 型別表示細分領域的檔案型別的種類,經常對應不同的 MIME 型別 multipart/form-data: 一般用來檔案直接通過HTML Forms的POST提交 我們使用 html 的 form 標籤提交產生的 html提交的時候,預設產生application/x-www-form-urlencoded,當有檔案的時候使用multipart/form-data

參考

MDN HTTP 極客時間:winter重學前端(需購買)