認識 HTTP

MichaelXiao
程式裡有蟲
Published in
4 min readOct 22, 2022

Hi,不專業工程師是我~時隔 N 個月,終於想起來要來寫寫技術文。由於一直都在準備資訊安全相關的考試,發現自己對於電腦網路的知識實在太差勁,剛好重新複習並用自己的話寫出來分享給大家~請不吝指教!

Hyper Text Transfer Protocol,HTTP,應該是最廣泛使用的傳輸協定了,是用來傳輸資料的協定,其後因應資訊科技發展,多了加密存取機制進而誕生了 HTTPS, S = Secure。

Photo by Ashwini Chaudhary(Monty) on Unsplash

HTTP 的運作

  1. Client to Web server → 以 client 是瀏覽器為例,瀏覽器會跟伺服器端先建立連線,建立連線則是以傳輸層的 TCP 作為溝通協定,通常 http 會走 TCP 的 80 port。
  2. http request → 在建立連線後,client 會向 server 發出請求,請 server 回覆我們所需要的東西。瀏覽器的話就是要回 html、javascript….要呈現的資料。
  3. http response → 收到 client 的 request 後,給予回應,如果有相對應的資訊就提供,沒有的話就回覆 error,同時會帶有 http status code 如 200、404…
  4. release connection → 如果 server 端模式設定為 closed 會由 server 端主動關閉 TCP 連線;keep-alive 則會保持連線一段時間
  5. parse content → 同樣以瀏覽器為例,client 端收到 response 後,則依照 HTML 內容顯示畫面

HTTP 封包

  1. start line → 區分是哪一種封包:request or response。
    request → request-line: method / request-target / http-version。中間用空白(space, SP)隔開。
    response → status-line:http-version / status-code / reason-phase。中間用空白(space, SP)隔開。
  2. header line → 不一定要使用,裡面會帶一些 client / server 的資訊。可能有多行,以 CR LF 換行。
  3. entity body → 不一定會使用,是主要用來放資料的地方。(常見的用法會放 payload 在裡面,可能是 XML / Json…)
  4. start line 與 header line之間沒有空行(CR LF),header line 與 entity body 則有。

METHOD 方法

  1. GET
    請求資源使用,大部分我們在瀏覽網頁的時候用的是這個,跟伺服器要資料的時候也是用它。
  2. POST
    使用 POST 通常是在我們用來新增資料或是提交資料的時候使用,例如登入。
  3. HEAD
    顧名思義用來取得 header 使用。
  4. PUT
    用來修改資料或是覆蓋資料時使用,但使用它時通常會完整上傳整份資料,佔用資源較多,於是後來有衍生出 PATCH 做部分更新使用。
    如果是上傳 server 沒有的資料,根據用途,也可能會拿來作為新增使用。
  5. DELETE
    就是刪除指定的資源。
  6. TRACE
    請 server 回傳我們發出的 request 用來測試居多。
  7. CONNECT
    當瀏覽器使用 proxy 的時候會用到,由瀏覽器先跟代理伺服器建立連線取得 Connection Established 在接續後面作業。
  8. OPTIONS
    當開發時,我們可以透過 OPTIONS 來確認這個 url 有哪些 method 可以使用。

STATUS CODE 狀態碼

  1. 1xx
    表示收到 request 或是正在處理。
  2. 2xx
    表示成功,大部分都會回 200
  3. 3xx
    表示 redirect 需要謹慎使用。(尤其是301/308會將資源永久轉址)
  4. 4xx
    表示 client 的輸入有誤,造成 request 異常。如404400
  5. 5xx
    表示 server error。 如500502

--

--

MichaelXiao
程式裡有蟲

Hi!不專業工程師是我,跟大家分享工作上遇到的各種疑難雜症。・。・