HTTP 通訊協定介紹

  • HTTP 理念:( resource ) + ( method )
  • HTML 通常只用上 GET / POST,但其實 HTTP 裡還有除了這兩個以外很多 method 可用。

HTTP 1.1

相較於HTTP1.0來說,HTTP1.1具有持久化連接(long pull、long streaming,連接獨享)、緩存、accept-range、及提供更多header語法的優點。但存在一個連接同一時間只能處理一個請求,該請求未處理完成前連接無法被重複使用(FIFO原則)、pipeline未被多數http proxy支援,且多數瀏覽器預設關閉HTTP1.1 的pipeline 功能的缺點。

通訊格式
POST /upload HTTP/1.1
HOST: justjii.justdrink.com.tw
Content-Type: application/json
Content-Length: 15

{"msg": "Hello world"}

HTTP 2.0

採用請求/回應多路、舉有header壓縮功能(採用Huffman進行壓縮)、流量控制(只能針對data frame)、Server push(PUSH_PROMISE)等功能,能大幅縮短網路傳輸時間。Goodle spdy 是 http2的實際應用。

HTTP/2的缺點大多與TCP缺點類似,主要在於要TCP 3次的hand shake。

GET method

  • READONLY 的,讀取資源,只有 GET 才能使用 Query String
  • 以物件 id 結尾,一般是指讀取單一物件
  • 如果沒有 id 結尾,則是讀取該物件的 Collection
    • /users
    • /users/12345

POST method

DELETE method

PUT method

PATCH method

OPTIONS method

  • 在 cross domain request 時,用戶會先發出 options

常用的 HTTP Response Code

  • 200 (OK)
  • 202 (Accepted)
    • 伺服器收到 request ,並且確定請求沒問題。
    • 不過,這個請求需要執行很長的時間,所以為了避免客戶等待。即使工作還沒完成也好,先回等客戶端:「工作收到了」
    • 應該用 Server Push 的方式來處理 async request
  • 304 (Not Modified)
    • 如果客戶 request 重複的資源,通常會 Cache 起來,如果客戶端版本是最新的,就回 304。否則回 200。
  • 400 (Bad Request)
    • 請求的內容有誤,拒絕執行
  • 401 (Unauthorized)
    • 還沒 login
  • 403 (Forbidden)
    • 跟 400 不同,伺服器明白請求的內容,但請求內容與商業邏輯矛盾,伺服器拒絕執行
  • 404 (Not Found)
    • 請求的資源不存在,有些系統,即使資源存在,而 method 不對,也會返回 404
  • 409 (Conflict)
    • 表示用戶正在改動的這個物件,已經被人先改動過了。
  • 500 (Internal Server Error)
  • 502 (Bad Gateway)
  • 503 (Service Unavailable)
    • 伺服器沒當掉,只是太多人在使用,所以暫時無法提供服務。