Try   HackMD

Week5 —— HTTP(+S, on SSL/TLS)

  • 什麼是通訊協定?
    為什麼要有通訊協定的存在?

定義:通訊協定在網路規範數據在網路節點之間,該如何進行傳輸和交換的一套標準。
它們描述了傳送與接收訊息、處理以及回應的格式和程序 (process)。

存在原因有

- 規格化: 不同 製造商、不同 系統與軟體、不同 地理位置的節點能夠通過遵守同一套通訊協定來進行溝通。
- 效率:定義了數據傳輸的標準格式和程序,可以提高數據傳輸的效率。
- 可靠性:包含錯誤檢測、校正機制,提高數據傳輸的可靠性。
- 兼容性:確保新舊技術之間彼此兼容性。
- 🌟安全性:部分通訊協定,甚至還提供數據加密、驗證,來保證數據傳輸的安全。 |

TCP / IP HTTP FTP SMTP
定義 網路通訊規則 分配網路資源協定 文件傳輸 電子郵件傳輸
層級 OSI 模型
傳輸層 (TCP)與網路層 (IP)
應用層 應用層 應用層
傳輸方式 連接導向 (TCP)
非連接導向 (IP)
請求—回應 控制和資料連接 請求—回應
用途 網路通訊 網頁資料傳輸 文件傳輸 電子郵件傳輸
安全性 要 HTTPS 要 SSL / TLS 要 SSL / TLS
實例 瀏覽器與伺服器 瀏覽網頁 上傳下載文件 發送接收郵件

HTTP 通訊協定有哪些重要的特性?

  • 無狀態性:HTTP協定是無狀態的,意味著伺服器不會保存客戶端的任何資料。每次客戶端發送請求到伺服器時,伺服器就會處理該請求並回應,然後忘記請求。無狀態性讓 HTTP 協定更簡單,但也意味著無法直接實現像登錄狀態或購物車這類需要狀態的功能,這需要使用到如 Cookie 的其他技術。

  • 簡單快速:客戶端向伺服器請求服務時,只需要傳送方法和路徑。由於 HTTP 協定的設計簡單,所以通訊速度很快。

  • 靈活:HTTP 允許傳輸任何類型的數據,只需要在 HTTP Header 中的 Content-Type 欄位中標明資料類型即可。

  • 無連接:意味著一次 HTTP 通信只能處理一個請求。伺服器處理完客戶的請求並收到客戶的應答後,即切斷連接。這可以 節省傳輸時間

  • 支援 BLOB:支援 BLOB(Binary Large Object),這表示它可以傳輸如圖片或其他多媒體檔案等大型二進位對象。

  • 可擴展性:允許自定義方法和 Header 欄位,使協定具有高度擴展性。

請注意,HTTP是一種明文傳輸協定,這意味著其在傳輸數據時並不具備安全性。然而,透過HTTPS(HTTP Secure)
可以為 HTTP 協定提供加密的連接,以保護數據的安全。

HTTP Request 包含哪些重要的資訊欄位?

HTTP Request 主要由三部分組成:起始行 (Start line),請求頭 (Header),以及請求主體 (Body)。以下是這三個部分中的一些重要的欄位:

起始行 (Start line)

Method HTTP 方法,如 GET、POST、PUT、DELETE
URL 請求的 URL,包含了所要訪問的資源的路徑
HTTP Version 使用的 HTTP 版本,如 HTTP / 1.1 或 HTTP / 2

請求頭 (Header)

Host 要訪問的伺服器的地址和端口號 (port)
User-Agent 客戶端(例如瀏覽器)的識別資訊
Accept 客戶端接受的媒體類型
Content-Type 請求有主體時,會指定主體的媒體類型
Content-Length 請求有主體時,會指定主體的長度(以字節為單位)
Authorization 當需要認證時,會包含認證憑據
Cookie 與請求的 URL 相關的所有 Cookie

請求主體 (Body)

包含實際的請求資料,並不是所有的請求都有主體。
如:GET 請求沒有主體,POST, PUT 請求通常有主體。

請注意,以上只是一些常見的重要欄位,還有許多其他的 header 欄位可以用於各種目的。

HTTP Response 包含哪些重要的資訊欄位?

HTTP Response 主要由三部分組成:

  • 狀態行 (Status line)
  • 響應頭 (Header)
  • 響應主體 (Body)。

以下是這三個部分中的一些重要的欄位:

狀態行 (Status line)

HTTP Version 使用的 HTTP 版本
Status Code HTTP 狀態碼,表明了請求的處理結果。
Status Text 與狀態碼相對應的文字描述

響應頭 (Header)

Content-Type 指定了主體的媒體類型
Content-Length 指定了主體的長度(以字節為單位)
Server 處理該請求的伺服器的訊息
Set-Cookie 伺服器設置的cookie
Date 響應生成的日期和時間

響應主體 (Body)

這部分包含實際的響應數據,這可以是 HTML、圖片、JSON 對象等等。

請注意,以上只是一些常見和重要的欄位,還有許多其他的 HTTP Header 欄位可以用於各種目的。

哪些前端程式、瀏覽器操作會預設使用 HTTP GET 方法?

以下是一些前端程式或瀏覽器操作會預設使用 HTTP GET 方法的例子:

  1. 在瀏覽器網址列輸入網址:輸入網址並按下 Enter 時,瀏覽器會使用 GET 方法向該網址發送請求。
  2. 點擊超連結:點擊一個超連結時。
  3. 重新載入頁面:點擊按鈕或使用快速鍵(如 Ctrl+R 或 F5)時,瀏覽器會重新請求當前的頁面。
  4. 透過 JavaScript 發送 AJAX 請求:當使用 fetchXMLHttpRequest 物件發送 AJAX 請求時,如果沒有明確指定請求方法,則預設會使用 GET 方法。
  5. HTML 表單的預設提交方式:當 HTML 表單(<form>)的 method 屬性沒有指定或者設定為 "GET" 時,提交表單會以 GET 方法發送請求。

請注意,GET 方法應該只用於 獲取資訊
不應該用來進行會改變伺服器狀態的操作(例如 建立、更新或刪除資源
這些操作應該使用其他的 HTTP 方法,例如 POSTPUTDELETE

詳細描述後端程式 redirect() 導向操作,實際上是如何透過前後端的互動完成?

絕對不會主動發訊息給客戶端

當後端程式執行 redirect() 方法時,它通常會向客戶端(Client side, 通常是網頁瀏覽器)發送一個特殊的 HTTP 響應。
這個響應的狀態碼通常是 301(永久重定向)302(臨時重定向),並且包含一個 Location 頭,其值為新的 URL。以下是這個過程的詳細步驟:

  • 客戶端向伺服器發送請求:使用者在網址列輸入網址、點擊連結、提交表單或者 JavaScript 發送 AJAX 請求而產生。
  • 伺服器接收到請求並處理:伺服器的後端程式會根據請求的 URL 和其他信息來決定如何處理這個請求。如果決定需要重定向,它就會執行 redirect() 方法。
  • 伺服器發送重定向響應:後端程式會創建一個狀態碼為 301 或 302 的 HTTP 響應,並且在這個響應的頭部加上一個 Location 頭,其值為新的 URL。然後,這個響應會被送回到客戶端。
  • 客戶端接收到重定向響應:當網頁瀏覽器(或其他客戶端)接收到這個響應時,它會解析這個響應,並且讀取 Location 頭的值。
  • 客戶端發送新的請求:瀏覽器會使用從 Location 頭獲取的新 URL,再次發送一個 HTTP 請求到伺服器。
  • 伺服器處理新的請求:當伺服器接收到新的請求時,它會像處理其他請求一樣處理這個請求,例如返回一個網頁或者其他資源。

Redirect 重新導向流程

Created with Raphaël 2.2.0客戶端客戶端伺服器伺服器網址列輸入網址、點擊連結、提交表單、AJAX根據 URL 處理狀態碼 301/302 響應+`Location` 頭,值為新 URL解析響應獲取新 URL 後再次發請求繼續處理...繼續...

透過這種方式,redirect() 方法可以引導瀏覽器從一個 URL 導向到另一個。
這種重定向是在伺服器端完成的,而客戶端的行為(例如瀏覽器)是透明的。
換句話說,使用者通常會看到他們的瀏覽器突然從一個頁面跳轉到另一個頁面,而且網址列中的 URL 也會改變。

What is a 301 Redirect, and When Should You Use One?

https://blog.hubspot.com/blog/tabid/6307/bid/7430/what-is-a-301-redirect-and-why-should-you-care.aspx

以下是一個用來比較 HTTP, HTTPS 和 SSL 的 Markdown 表格:

HTTPS

Hyper Text Transfer Protocol

功能 HTTP HTTPS SSL
定義 用於傳輸超文本的協議 HTTP Secure,傳輸加密的網頁資料,透過 SSL / TLS 協議加密,保護資料的完整安全。 Secure Sockets Layer,為網路通訊提供安全與資料完整性的加密協議。
安全性 不具備加密功能,資料傳輸過程會被竊取或篡改。 透過 SSL / TLS 提供加密連線,防止資料在傳輸過程被竊取篡改 SSL 是一種安全協議,用來確保在網際網路上資料的安全傳輸。
預設端口號 80 443 依賴於使用該協議的應用。
效能 比 HTTPS 快 比 HTTP 慢,需要加密解密,但差異在現代硬體可忽略不計 效能取決於如何實施以及它被用在哪個網路應用中
隱私保護 低,傳輸過程可能會被竊取或篡改。 高,即使被攔截也無法輕易閱讀 高,因為 SSL 提供了數據加密、身份驗證以及訊息完整性檢查。

在實際應用中選擇使用哪種協議的一些考慮因素包括:

  • SEO 必要性(搜索引擎優化):Google 已明確表示 HTTPS 是他們排名算法,不用的話搜尋結果排名會非常災難

  • 資料安全必要性:信用卡資訊,個人身份資訊,登入憑證等,
    HTTPS 通過 SSL / TLS 協議提供的加密連線能提供必要的安全性。

    • 使用者信任和網站聲譽:使用者在瀏覽器上看到 https 或鎖定的 🔒 圖標,可以知道他們的資訊是安全的,增強他們對網站的信任。
  • 效能和可用資源:儘管在現代硬體上 HTTPS 的加密和解密操作帶來的效能下降通常可以忽略不計,但在有限的資源或高負載的情況下,這可能仍是一個需要考慮的因素。

  • Web 功能需求:某些新的 Web 功能,如 HTTP/2 和 Service Workers,要求網站必須運行在 HTTPS 上。

  • 成本與管理:雖然現在有許多組織如 Let's Encrypt 提供免費的 SSL 憑證,但在某些情況下,購買和管理 SSL 憑證可能仍需要時間和資源。

OSI Model Layer Function
Layer 7: 💁Application 應用層 為應用程式提供網路服務的端點/接口。例如 HTTP(S)、SMTP、FTP 等。
Layer 6: 🧑‍💻Presentation 表示層 負責資料的轉換和編碼,以便其能夠在資料上進行傳輸,例如 ASCIIUnicode、JPEG
Layer 5: 💬Session 會話層 建立、管理和終止兩個網路節點之間的連結(會話),例如 NFS、SQLRPC
SSL 🔐 (Secure Sockets Layer)
TLS (Transport Layer Security)
保證資料安全和完整性,使用了 TCP (第4層)
Layer 4: ➡️ Transport 傳輸層 提供了點對點的資料傳輸與控制。例如 TCP 和 UDP 協議。
Layer 3: 🛜 Network 網路層 負責數據包的路由和傳輸,例如 IP 協議、ICMP、IGMP。
Layer 2: 🧵Data Link 資料連結層 連接網路軟體和硬體的部分。例如 Ethernet 和 PPP。
Layer 1 ⚡️Physical 實體層 處理硬體方面的細節,例如電壓、時鐘、物理數據速率等。Ethernet(硬體實現)。

SSL (Secure Sockets Layer) 和它的繼任者 TLS (Transport Layer Security) 主要運作在 OSI 模型的第五層(會話層)和第四層(傳輸層)之間。它們為網路通信提供了安全和數據完整性保證。

SSL / TLS 協議使用了傳輸層的服務(如 TCP),並為應用層(如 HTTP)提供了一個安全的通道。因此,當我們說 HTTPS(HTTP over SSL / TLS)時,實際上是指 HTTP 在 SSL / TLS 的保護下運行。

總的來說,雖然 SSL / TLS 在 OSI 模型中並沒有明確的一層,但它們主要在會話層和傳輸層之間運作,為上層應用提供安全性保證。

應用層 HTTP, HTTPS, SMTP, FTP

表示層 ASCII, Unicode, JPEG

會話層 NFS, SQL, RPC

傳輸層 TCP, UDP

網路層 IP, ICMP, IGMP

資料連結層 Ethernet, PPP

實體層 Ethernet(硬體實現)

### 5-NFS (Network File System): 
在許多 Unix 和 Linux 系統中,NFS 仍然是共享文件的主要方式。它也被用在一些企業級的存儲解決方案中。
NFS 是一種分佈式文件系統協議,由 Sun Microsystems 在 1980 年代開發,允許一個系統在網路上分享其文件系統給其他系統使用,就像本地存儲一樣。

### 4-UDP (User Datagram Protocol 使用者資料圖表協議):
UDP 是一種無連接的網路通信協議,它不保證消息的順序或可靠性,但傳輸速度快、低延遲,在許多即時應用中仍然被廣泛使用,常用於影片串流、VoIP(網路語音)、遊戲等對即時性要求高的應用。

4-TCP (Transmission Control Protocol):

TCP 是一種連接導向的協議,它確保數據包按照發送的順序到達,並重傳丟失的數據包,常用於需要可靠的傳輸的應用,如:網頁瀏覽、郵件傳輸等。
TCP 和 IP 的主要區別在於, IP (3層) 負責將數據包路由到目的地,TCP (4層) 接著負責數據的傳輸和控制。

3-ICMP (Internet Control Message Protocol):

用於 IP 網路診斷和報告錯誤的協議,例如 "ping" 命令

3-IGMP (Internet Group Management Protocol): 網際網路群組管理協議

主要用於支援多播和 IP 電視(IPTV)等應用。多播允許一個來源節點向多個目標節點同時傳送資料,而不需要重複傳送。

(少用)2-PPP (Point-to-Point Protocol 點對點協議):

一種數據鏈路協議,用於在直接連接的兩個節點之間建立網路連接,例如撥號和數據機連接。

雖然 PPP 在撥號上網中的使用已經大大減少(因為寬頻和行動網路的普及),但它仍然在某些場合下被使用,例如在某些 DSL(數位用戶線)和 VPN(虛擬私人網路)連接中。

Ethernet:

一種用於構建區域網路(LAN)的技術標準。
它定義了如何進行數據包的傳輸,包括如何格式化數據、如何檢測和糾正錯誤等。
Ethernet 可以用於有線(例如,使用雙絞線或光纖)和無線(例如,Wi-Fi)網路。

LAN