iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

HTTP 和HTTPS 都是應用層的協議之一,也是一般人使用網路時最常用的協議,當我們在瀏覽網站內容時,不管是網站上的文字、圖片、影片,或是上傳/下載檔案等操作,都是透過HTTP/HTTPS 進行資料的傳輸,它們的協議內容規範了客戶端請求和伺服器回應的標準

HTTP

HTTP (Hyper Text Transfer Protocol,超文本傳輸協議),用於客戶端與伺服器之間通訊的協議,定義了多種類型的請求和回應,通訊時透過定義好的類型進行溝通,相當於一種國際語言。

客戶端與伺服器

HTTP 是基於客戶端-伺服器模型運作,客戶端通常是瀏覽器,也有可能是網路爬蟲或其他工具;伺服器則是儲存和提供資源的主機,客戶端發送HTTP 請求至伺服器的指定埠(預設是80埠),伺服器接收到請求便會開始處理,處理完畢後回傳HTTP 回應

請求與回應

HTTP 通訊是採一問一答的方式,也就是一個請求(Request)一個回應(Response),請求時包含所需的資料訊息,如URL、請求方法、表頭訊息等;回應時也包含請求所需的資料訊息,如網頁內容、狀態碼、表頭訊息等。

無狀態協議

HTTP 是屬於無狀態協議,每次的請求-回應都是獨立的,伺服器不會保留本次請求以前的訊息,這樣可以使HTTP 訊息輕量化。

但有需要的時候也會透過會話管理技術,如Cookie、Session,來維護狀態訊息。

HTTP 請求

請求(Request)內容除了客戶端要傳送給伺服器的資料外,還有一些必要參數,如HTTP 方法、URL、協議版本、請求表頭等。

HTTP 方法

HTTP 方法(HTTP Method)是協議中,定義了該次請求伺服器應當執行的操作,如GET 是查詢資料、POST 是新增資料等,常用的HTTP 方法如下:

  • GET:請求獲取資料。
  • POST:提交資料,通常用於新增資料。
  • PUT:更新指定資料。
  • PATCH:局部更新指定資料。
  • DELETE:刪除指定資料。

請求表頭

請求表頭(Request Headers)是每次發送HTTP 請求都會附加在資料上,內容包含與請求有關的資訊,常用的欄位如下:

  • Authorization:用於傳遞認證信息,通常是用戶名和密碼,以便訪問受密碼保護的資源。
  • Cache-Control:用於控制緩存的行為,指示伺服器是否應該緩存請求的內容以及多久。
  • Content-Type:指定了請求中包含的內容的類型,例如表單數據的編碼方式。
  • Cookie:包含了之前由伺服器發送給客戶端的Cookie信息,以便伺服器識別用戶。
  • Host:指定了伺服器的主機名和端口號,告訴伺服器該請求要發送到哪個網站。
  • Origin:指示了發送請求的來源,通常用於跨源請求的安全檢查。
  • Referer:指示了請求是從哪個頁面來的,通常在跟蹤和分析上有用。
  • User-Agent:用戶代理,包含了發送請求的用戶端應用程式的信息,通常包括瀏覽器的名稱和版本號。

如果想要知道更多請求表頭資訊可以看維基百科

HTTP 回應

狀態碼

HTTP 狀態碼(HTTP Status Code)會在每個HTTP 回應的第一行,由3位數字組成的狀態碼,代表伺服器對請求處理的結果,以第一碼進行分類回應類型:

  • 1xx(訊息):請求已被伺服器接收,繼續處理。
  • 2xx(成功):請求已成功被伺服器接收、理解並接受。
  • 3xx(重新導向):需要後續操作才能完成這一請求。
  • 4xx(請求錯誤):請求含有錯誤或無法被執行。
  • 5xx(伺服器錯誤):伺服器在處理某個正確請求時發生錯誤。

回應表頭

回應表頭(Response Headers)是伺服器處理完HTTP 請求後,回傳伺服器的訊息、回應的日期時間、內容類型等,以下是一些常用的欄位:

  • Cache-Control:這個標頭規定了回應的緩存控制策略,例如是否可以緩存回應、緩存的有效期等。
  • Content-Type:這個標頭指示了回應主體的內容類型,例如文本(text/html)、圖片(image/jpeg)、JSON(application/json)等。
  • Date:這個標頭包含了回應生成的日期和時間。
  • Server:這個標頭包含了伺服器的信息,例如伺服器的名稱和版本。
  • Set-Cookie:這個標頭用於在客戶端設置 HTTP cookie,通常用於跟蹤用戶會話或存儲用戶的設置信息。

如果想要知道更多請求表頭資訊可以看維基百科

回應主體

回應主體(Response Body)是伺服器處理完請求內容後,實際要回傳給客戶端處理或顯示的資料,主體內容是HTML、JSON、XML、圖片、影片等。

主體的類型是由回應表頭中的Content-Type 指定,客戶端會依據Content-Type 內容進行解析和處理。


HTTPS

HTTPS (Hyper Text Transfer Protocol Secure,超文本傳輸安全協議),它建立在HTTP 協議的基礎之上,再使用SSL/TLS 為HTTP 請求和回應提供資料加密、身份驗證及資料完整性驗證等機制,藉此提升了資料傳輸的安全性。

因為HTTPS 提供的功能是基於SSL/TLS 協議,也被稱為HTTP over SSL 或HTTP over TLS。

加密通訊

HTTPS 使用TLS 加密資料,保護資料在傳輸過程中即使被竊取也無法得知內容。

身份驗證

使用HTTPS 進行通訊時,會要求伺服器提供TLS 憑證來表明身份,客戶端收到憑證後會進行驗證,確保它是由可信的憑證頒發機構所簽發的,以防偽造伺服器。

資料完整性

加密過後的資料,使用MAC(Message Authentication Code,消息驗證碼)的技術來達成完整性驗證,可以保證數據在傳遞過程中沒有被篡改,避免中間人攻擊(Man-in-the-middle attack,MITM)。


SSL/TLS

SSL/TLS 和TCP/IP 類似,是SSL 和TLS 兩個協議的簡寫組合在一起,它們的用途都是在客戶端與伺服器之間提供資料加密及驗證機制的通訊協議,只是SSL 是TLS 的前身,推出TLS 是為了取代SSL 協議。

SSL

SSL (Secure Sockets Layer,安全通訊協議)於1995年首次發佈了SSL2.0,隔年又推出了SSL3.0,但其本身設計存在缺陷,因此目前已經被TLS 完全取代。

TLS

TLS (Transport Layer Security,傳輸層安全性協議),於1999年作為SSL3.0 的後續產品推出,是比SSL 更安全的版本。

TLS 交握

在網路用語中,交握是一種確認雙方身分的程序,TLS 交握程序中,會對雙方進行身分驗證,然後交換加密金鑰。

當傳輸層建立連線(TCP 三次握手),就輪到TLS 開始握手,過程中會確定以下資訊:

  • 指定使用的TLS 版本(TLS 1.2, 1.3)。
  • 決定使用的加密套件。
  • 使用TLS 憑證驗證伺服器身分。
  • 產生Session Key。

運作差異

從上面我們可以知道,SSL 和TLS 的用途非常類似,但它們的運作方式並不同。

交握方式

  1. SSL 交握是一種明確連線,而TLS 交握則是隱含連線。
  2. SSL 交握步驟比TLS 交握多,TLS 移除額外步驟以及減少加密套件總數,藉此加速交握程序運作。

加密套件

加密套件是一組演算法的集合,可建立金鑰來加密客戶端與伺服器之間的資訊。

通常加密套件包含金鑰交換演算法、驗證演算法和MAC 演算法,基於安全性考量,TLS 加密演算法的版本較SSL 新。

訊息身分驗證

SSL 和TLS 均使用MAC 技術來達成資料完整性驗證,只是SSL 協議使用的是MD5 演算法(已棄用)產生MAC,而TLS 使用HMAC(雜湊訊息驗證碼)來實現更複雜的密碼編譯和安全性。

提醒訊息

提醒訊息是SSL/TLS 協議用來傳送錯誤和警告的方式,SSL 提醒訊息只有兩種,「警告」和「嚴重」,警告提醒表示發生錯誤但連線可以繼續,嚴重提醒表示必須立即中止連線,而TLS 有另外的提醒訊息,稱為「關閉通知」,關閉通知提醒指示工作階段結束。

另外,SSL 提醒訊息不加密,而TLS 提醒會加密。

憑證

目前已將TLS 作為產業標準,SSL 已被完全棄用,所有的SSL 憑證自然也不被採用,但網路術語仍常用SSL(憑證)表示TLS(憑證),即使有個憑證自稱是SSL 憑證,它也會支援TLS 協議。

而憑證就是為了確保網路通訊的安全性,其提供身分驗證的數字憑證包含以下資訊:

  • 公開金鑰:伺服器的公開金鑰,用於加密通訊。
  • 數位簽章:由證書授權機構(Certificate Authorities,CA0) 簽署,用於證明憑證的有效性和可信性。
  • 身分訊息:伺服器的身分訊息,通常有域名和組織訊息。
  • 有效期限:該憑證的有效時間。

參考資料

超文本傳輸協定 - 維基百科,自由的百科全書

超級文字傳輸安全協定 - 維基百科,自由的百科全書

HTTPS 是什麼?一文搞懂和 HTTP 有什麼差別 - ALPHA Camp

[教學] HTTPS 揭秘:網站安全的關鍵技術

SSL 與 TLS 的比較 – 通訊協定之間的差異 – AWS

SSL 與 TLS:您需要知道的一切


上一篇
Day 8 - 域名系統(DNS)
下一篇
Day 10 - Web Hosting
系列文
後端工程師學習地圖導覽11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言