關於 HTTP 的東西都在這。
HTTP?
就是一個「協定」,也可以說是一套「標準」,就像千千為訂便當制定的標準,大家都可以透過這個標準來做溝通。
常見的 HTTP Method
- GET 請求完整資料
- HEAD 只請求 header 資料
- POST 傳送資料到 server
- PUT 更新資料內容(整筆取代)
- PATCH 更新資料內容(只取代部分)
- DELETE 刪除指定資料
- OPTIONS 查看指定 server 提供哪些服務
常見的 Status code
大範圍:
- 1xx 處理中等一下 (Hold on)
- 2xx 成功 (Here you go)
- 3xx 你去其他地方 (Go away)
- 4xx 用戶端出錯 (You fucked up)
- 5xx 伺服器出錯 (I fucked up)
例子:
- 100 => 我有收到你的請求,請你繼續發下一個 request。
- 200 => 成功,可能是取得資料或是傳送成功
- 201 => 成功建立資料(通常是 POST)
- 202 => 我收到你的請求了,但我還沒有處裡完(也不知道什麼時候會處理完)
- 204 => 成功,但我沒有什麼想跟你回應的(例如 DELETE)
- 206 => 成功(發生在 Client 只請求一部分的資料)
- 300 => 有一個以上的回應結果,你或我挑出其中一個(沒有明確規範)
- 301 => 永久搬家,下次不會再去原家,直接去新家
- 302 => 暫時搬家,下次還是會先去原家,再決定去哪
- 303 => 不會傳 Location 給你,而是直接幫你重新導向到某個地方(通常在 POST 成功後)
- 304 => 客戶端有緩存檔案(含
If-Modified-Since
的 request header),可以節省傳輸流量 - 400 => 語法錯誤 or 請求太大
- 401 => 沒通過身分驗證
- 403 => 你沒有權限存取這個資源
- 404 => 沒有你要的東西
- 405 => 伺服器不允許你使用的 HTTP Method
- 410 => 東西曾經在,但現在已經不在了(永久),請你自己去別的地方找
- 422 => 通常發生在 POST,可能是傳送的內容不對。
- 429 => 請求太多啦,超過請求數量的最大限制。
- 415 => 你請求的資料格式伺服器沒有提供(例如 Content-Type 不對)
- 440 => 你的連線逾時啦,重新登入一遍再來吧。
- 414 => 你的 URL 太長啦(通常是 GET 的 query 太長的關係,可以改用 POST 來解決)
- 500 => 未預料的錯誤
- 503 => 維護中或過載(提供比 500 更明確一點的資訊,像是「多久後會好」之類的)
補充-HTTP 只是其中一種交換資料的方式
以傳紙條的例子來說,可以把「訂便當」的格式想成是遵循 HTTP 這個協議來進行:
1 | GET |
但如果是「借籃球」,就不需要採取 HTTP 協議來進行:
1 | A:借五顆籃球 |
所以 HTTP 只是其中一種交換資料的方式,並不代表「只能用這種方式」來進行。就跟 TCP、UDP 一樣,他們只是兩種不同的協議,你可以根據自己的需求來決定要用哪一種協議,而不是一定要用特定哪種協議才是正確的。
所以你當然也可以自己定義一個協議來決定怎麼交換資料,不要被 HTTP 的方式給侷限住了。