---
# System prepended metadata

title: 什麼是HTTP？
tags: [backend]

---

# 什麼是HTTP？
###### tags: `backend`

## 前言
什麼是HTTP，又什麼是HTTPS
後面多了個S差很多嗎？這篇要來講一下到底什麼是HTTP，以及兩者之間的差別

## HTTP
根據wiki對此名詞的解釋為超文本傳輸協定（英語：HyperText Transfer Protocol，縮寫：HTTP）。簡單來說就是傳遞HTML的語言(規範)
通常是使用TCP協定，透過使用瀏覽器、網路爬蟲或其他工具，使用者發出了一個HTTP請求指定到伺服器上的特定埠(預設是80)。
伺服器收到請求後回傳了指定的資源給使用者，雙方之間溝通的語言就是HTTP

## HTTP(S)
超文本傳輸安全協定（英語：HyperText Transfer Protocol Secure，縮寫：HTTPS
多了重要的兩字「安全」，基於HTTP在傳遞訊息中是沒有受到加密、驗證等保護措施，會有資料在傳遞途中被竄改或竊聽等可能性，所延伸出來的協定。
伺服器預設使用的埠是443，其管理員必須先建立數位憑證，並由第三方機構簽章讓瀏覽器相信其憑證是可被信任的。
簡單的分辨方式是在瀏覽器的網址列中，是http還是https做為開頭

## 請求方式
HTTP共有八種請求方式，但平時最常看到的只有GET跟POST
在RESTful API中會特別使用HTTP的請求方式去定義此次請求的動作

GET
    向指定的資源發出「顯示」請求，用於讀取資料，不應該帶有產生資料的副作用
    GET的參數會在url最後面，從?開始傳遞
    例如 abc.com?id=1&data=hello

POST
    提交資料給伺服器端做處理(例如表單或上傳檔案)，資料被包在請求文本中，用於建立新資源或修改現有資源(或兩者皆有)
    表單的資料會在HTTP請求的body內
    
## 狀態碼
在請求伺服器後，伺服器對此請求回應狀態的三位數字代碼
講些平常較容易看到的狀態碼(status code)

2   開頭為成功請求
200 OK
    請求已成功，請求所希望的回應頭或資料體將隨此回應返回。

3   開頭為重新導向

4   開頭為客戶端錯誤
400 Bad Request
    由於明顯的客戶端錯誤（例如，格式錯誤的請求語法，太大的大小，無效的請求訊息或欺騙性路由請求），伺服器不能或不會處理該請求。
    
401 Unauthorized
    類似於403 Forbidden，401語意即「未認證」，即使用者沒有必要的憑據。該狀態碼表示當前請求需要使用者驗證。
    
403 Forbidden
    伺服器已經理解請求，但是拒絕執行它。與401回應不同的是，身分驗證並不能提供任何幫助，而且這個請求也不應該被重複提交。
    
404 Not Found
    請求失敗，請求所希望得到的資源未被在伺服器上發現

5   開頭為伺服器錯誤
500 Internal Server Error
    通用錯誤訊息，伺服器遇到了一個未曾預料的狀況，導致了它無法完成對請求的處理。沒有給出具體錯誤資訊。