不知道大家在看網址的時候,有沒有好奇網址的開頭都有 http
或者 https
,這兩者到底是什麼?
差別又在哪?網路基礎知識難免要理解 HTTP 與 HTTPS 的相關知識,我們來一探究竟吧!
HTTP 是什麼?
HTTP 的全名為 HyperText Transfer Protocol,超文本傳輸協定,是全球資訊網的數據通信的基礎。設計 HTTP 最初的目的是為了提供一種發布和接收 HTML 頁面的方法。 透過 HTTP 或者 HTTPS 協定請求的資源由統一資源識別碼(Uniform Resource Identifiers,URI)來標識。
通常,由 HTTP 客戶端(client)發起一個請求,建立一個到伺服器指定埠(預設是 80 埠)的 TCP 連線。HTTP 伺服器(server)則在那個埠監聽客戶端的請求。一旦收到請求,伺服器會向客戶端返回一個狀態,比如 “HTTP/1.1 200 OK”,以及返回的內容,如請求的檔案、錯誤訊息、或者其它訊息。
HTTP vs HTTPS
HTTP(Hypertext Transfer Protocol)和 HTTPS(Hypertext Transfer Protocol Secure)是用於在互聯網上傳輸資料的兩種不同協議,他們在安全性和資料傳輸方面存在顯著差異。
HTTP 是一種標準的網路協議,用於在網頁瀏覽器和網路伺服器之間傳輸資料。因為是明文協議,意味著資料在傳輸過程中不進行加密,因此容易受到中間人攻擊的威脅。如果惡意使用者能夠截取 HTTP 傳輸的資料包,他們可以輕鬆地查看和竊取其中的信息,包括敏感的個人資料和登入憑證。
相較之下,HTTPS 是 HTTP 的安全版本。HTTPS 使用 SSL(Secure Sockets Layer)或其繼任者 TLS(Transport Layer Security)協定來加密在瀏覽器和伺服器之間傳輸的資料。在 HTTPS 連線中,資料在傳輸過程中被加密,使得中間人攻擊變得非常困難。 HTTPS 通常使用數位憑證來驗證伺服器的身份,確保使用者連接的是正確的伺服器而不是惡意偽裝的網站。這為用戶提供了更高的安全性和隱私保護。
主要的差異在於資料加密和安全性。 HTTP 是不安全的明文協議,而 HTTPS 透過資料加密和身份驗證提供了更高的安全性,因此在涉及敏感資訊傳輸的情況下,如線上銀行、電子郵件和電子商務等,HTTPS 被廣泛採用以確保用戶資料的保護和隱私。
請求方法(動作)
剛剛提及到 client 會發出請求,那麼有請求這項動作,這個動作就要搭配相對應的動詞!
HTTP/1.1 協定中共定義了八種方法(動作)來以不同方式操作指定的資源,
以下介紹五種常見的請求方法:
➤ GET
- 向指定的資源發出顯示請求。使用 GET 方法應該只用在讀取資料,通常用於從伺服器獲取數據而不引起副作用,意即,不會更改伺服器上的資源狀態與數據。
- GET 請求通常將參數附加到 URL 的查詢字串(query string)中。Query string 是 URL 中問號後面的部分,包含鍵值對(key, value),如
?key1=value1&key2=value2
。這些參數用於請求特定的數據或定制請求,例如,在搜索引擎中,你可以通過查詢字符串來指定搜索關鍵字。 - 每個 GET 請求只能由單一個 URL 觸發。如果需要獲取多個資源,則要發送多個 GET 請求,或者使用其他方法來獲取多個資源,比如使用 POST 請求提交一個包含多個資源請求的數據。
1
2
3
4GET /example/page?param1=value1¶m2=value2 HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
GET 方法,用於向伺服器請求數據,通常用於讀取資源而不修改他們,是冪等(無論操作執行多少次結果都是相同的),適合在瀏覽器中獲取網頁內容,查詢參數通常附加在 URL 上的查詢字串(query string)中,且每個請求只能請求一個 URL。
➤ POST
- 向指定資源提交資料,請求伺服器進行處理(例如提交表單或者上傳檔案),這樣的請求用於建立或更新資源。
- 與 GET 請求不同,POST 請求將資料放在 request body 中,而不是作為 URL 參數,這對於敏感資訊(如密碼)很重要,因為資料不會出現在 URL 中,也使得 POST 請求更適合傳輸大量資料,因為 POST 請求沒有嚴格的數據長度限制。
- 瀏覽器發出的 POST 請求的 body 主要有兩種格式,一種是 application/x-www-form-urlencoded 用來傳輸簡單的資料,大概就是 “key1=value1&key2=value2” 這樣的格式。另外一種是傳檔案,會採用 multipart/form-data 格式是因為 application/x-www-form-urlencoded 的編碼方式對於檔案這種二進位的資料非常低效。
- POST 請求不會被瀏覽器緩存,因為通常會對伺服器端資源進行更改。
1 | POST /example/post-handler HTTP/1.1 |
POST 方法用於向伺服器發送數據,適合處理表單提交、資料上傳等需要向伺服器傳送資料的情況。
GET POST 在發送表單上的差異!
GET 和 POST 在發送表單資料時的主要差異在於資料的傳輸方式:GET 將資料附加到 URL 中,而 POST 將資料放在 request body 中,更適合處理敏感資訊和大量資料。
➤ PUT
- 向指定資源位置上傳其最新內容。
➤ PATCH
- 在現有的資料欄位中,增加或部分更新一筆新的資料。
➤ DELETE
- 請求伺服器刪除 Request-URI 所標識的資源。
# 讓我們透過一個線上購物來說明這些不同的 HTTP 請求方法:
GET:獲取商品資訊 ->
GET /products
獲取產品列表。- 當用戶訪問線上商店的網站時,他們使用GET請求從伺服器獲取商品列表,以查看可用商品。GET 請求用於檢索資訊,不會更改伺服器上的資源。
POST:將商品加入購物車 ->
POST /cart
將商品添加到購物車。- 用戶選擇了一些商品後,使用 POST 請求將所選商品添加到購物車。這是因為 POST 請求通常用於在伺服器上創建新資源。
PUT:更新購物車中的商品數量 ->
PUT /cart/item/123
更新購物車中商品 123 的數量。- 如果用戶在購物車中更改了商品數量,使用 PUT 請求通知伺服器更新購物車中特定商品的數量。
PATCH:更新用戶資訊 ->
PATCH /user/456
部分更新用戶資訊。- 假設用戶需要更改他們的送貨地址,使用 PATCH 請求來更新他們的個人資訊,只更改地址部分而不影響其他資訊。
DELETE:從購物車中刪除商品 ->
DELETE /cart/item/789
從購物車中刪除商品 789。- 用戶可以使用 DELETE 請求從購物車中刪除商品,以移除不想購買的商品。
POST vs PUT vs PATCH
在理解上 POST/PUT 都可以用來新增,PATCH/PUT 都可以用來修改,但這其中還是存在著一些差異,來看看以下表格:
POST 用於建立新資源而不取代原始資源或執行非冪等操作,PUT 用於完全取代指定資源,PATCH 用於部分更新資源。
safe methods & idempotent methods & cacheable methods
在上方表格中有提及一個 idempotent 就是所謂冪等,
在 HTTP 協定中,請求方法(HTTP methods)可以根據屬性進行分類,
包括 safe
、idempotent
和 cacheable
。
➤ Safe(安全):
安全性方法是指對伺服器上的資源的請求不會導致資源狀態的更改,也就是說,他們是唯讀的。
使用安全方法的請求不應該對伺服器上的資料產生副作用,對於安全方法的請求,不管執行多少次,不會改變伺服器上的資源狀態。常見的安全方法包括HTTP GET 和 HEAD。 GET 用於檢索資源的信息,而 HEAD 用於獲取資源的頭部信息,但不返回資源的主體內容。
➤ Idempotent(幂等):
冪等方法是指執行相同請求一次或多次的結果應該是相同的,不會導致資源狀態的改變。
重複執行相同的冪等請求不會造成不同的結果或產生不同的影響。這在處理網路中的故障時特別有用。常見的冪等方法包括HTTP GET、PUT 和 DELETE。GET 用於取得資源,PUT 用於替代資源,DELETE 用於刪除資源。
➤ Cacheable(可缓存):
可緩存方法是指伺服器的回應可以被緩存,並且可以在未來的請求中使用快取的回應,從而減少頻寬消耗和提高效能。
Response 可以在客戶端或代理伺服器上緩存,以便在將來的相同請求中重複使用。常見的可快取方法包括HTTP GET。 GET 請求的回應通常是可快取的,因為只是用於檢索資源資訊而不修改資源。