# 什麼是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 通用錯誤訊息,伺服器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。沒有給出具體錯誤資訊。