定義:通訊協定在網路規範數據在網路節點之間,該如何進行傳輸和交換的一套標準。
它們描述了傳送與接收訊息、處理以及回應的格式和程序 (process)。
存在原因有
- 規格化: 不同 製造商、不同 系統與軟體、不同 地理位置的節點能夠通過遵守同一套通訊協定來進行溝通。
- 效率:定義了數據傳輸的標準格式和程序,可以提高數據傳輸的效率。
- 可靠性:包含錯誤檢測、校正機制,提高數據傳輸的可靠性。
- 兼容性:確保新舊技術之間彼此兼容性。
- 🌟安全性:部分通訊協定,甚至還提供數據加密、驗證,來保證數據傳輸的安全。 |
TCP / IP | HTTP | FTP | SMTP | |
---|---|---|---|---|
定義 | 網路通訊規則 | 分配網路資源協定 | 文件傳輸 | 電子郵件傳輸 |
層級 | OSI 模型 傳輸層 (TCP)與網路層 (IP) |
應用層 | 應用層 | 應用層 |
傳輸方式 | 連接導向 (TCP) 非連接導向 (IP) |
請求—回應 | 控制和資料連接 | 請求—回應 |
用途 | 網路通訊 | 網頁資料傳輸 | 文件傳輸 | 電子郵件傳輸 |
安全性 | 無 | 要 HTTPS | 要 SSL / TLS | 要 SSL / TLS |
實例 | 瀏覽器與伺服器 | 瀏覽網頁 | 上傳下載文件 | 發送接收郵件 |
無狀態性:HTTP協定是無狀態的,意味著伺服器不會保存客戶端的任何資料。每次客戶端發送請求到伺服器時,伺服器就會處理該請求並回應,然後忘記請求。無狀態性讓 HTTP 協定更簡單,但也意味著無法直接實現像登錄狀態或購物車這類需要狀態的功能,這需要使用到如 Cookie 的其他技術。
簡單快速:客戶端向伺服器請求服務時,只需要傳送方法和路徑。由於 HTTP 協定的設計簡單,所以通訊速度很快。
靈活:HTTP 允許傳輸任何類型的數據,只需要在 HTTP Header 中的 Content-Type 欄位中標明資料類型即可。
無連接:意味著一次 HTTP 通信只能處理一個請求。伺服器處理完客戶的請求並收到客戶的應答後,即切斷連接。這可以 節省傳輸時間。
支援 BLOB:支援 BLOB(Binary Large Object),這表示它可以傳輸如圖片或其他多媒體檔案等大型二進位對象。
可擴展性:允許自定義方法和 Header 欄位,使協定具有高度擴展性。
請注意,HTTP是一種明文傳輸協定,這意味著其在傳輸數據時並不具備安全性。然而,透過HTTPS(HTTP Secure),
可以為 HTTP 協定提供加密的連接,以保護數據的安全。
HTTP Request 主要由三部分組成:起始行 (Start line),請求頭 (Header),以及請求主體 (Body)。以下是這三個部分中的一些重要的欄位:
Method | HTTP 方法,如 GET、POST、PUT、DELETE |
URL | 請求的 URL,包含了所要訪問的資源的路徑 |
HTTP Version | 使用的 HTTP 版本,如 HTTP / 1.1 或 HTTP / 2 |
Host | 要訪問的伺服器的地址和端口號 (port) |
User-Agent | 客戶端(例如瀏覽器)的識別資訊 |
Accept | 客戶端接受的媒體類型 |
Content-Type | 請求有主體時,會指定主體的媒體類型 |
Content-Length | 請求有主體時,會指定主體的長度(以字節為單位) |
Authorization | 當需要認證時,會包含認證憑據 |
Cookie | 與請求的 URL 相關的所有 Cookie |
包含實際的請求資料,並不是所有的請求都有主體。
如:GET 請求沒有主體,POST, PUT 請求通常有主體。
請注意,以上只是一些常見的重要欄位,還有許多其他的 header 欄位可以用於各種目的。
HTTP Response 主要由三部分組成:
以下是這三個部分中的一些重要的欄位:
HTTP Version | 使用的 HTTP 版本 |
Status Code | HTTP 狀態碼,表明了請求的處理結果。 |
Status Text | 與狀態碼相對應的文字描述 |
Content-Type | 指定了主體的媒體類型 |
Content-Length | 指定了主體的長度(以字節為單位) |
Server | 處理該請求的伺服器的訊息 |
Set-Cookie | 伺服器設置的cookie |
Date | 響應生成的日期和時間 |
這部分包含實際的響應數據,這可以是 HTML、圖片、JSON 對象等等。
請注意,以上只是一些常見和重要的欄位,還有許多其他的 HTTP Header 欄位可以用於各種目的。
以下是一些前端程式或瀏覽器操作會預設使用 HTTP GET 方法的例子:
fetch
或 XMLHttpRequest
物件發送 AJAX 請求時,如果沒有明確指定請求方法,則預設會使用 GET 方法。<form>
)的 method
屬性沒有指定或者設定為 "GET"
時,提交表單會以 GET 方法發送請求。請注意,GET 方法應該只用於 獲取資訊
不應該用來進行會改變伺服器狀態的操作(例如 建立、更新或刪除資源 )
這些操作應該使用其他的 HTTP 方法,例如 POST、PUT 或 DELETE。
當後端程式執行 redirect()
方法時,它通常會向客戶端(Client side, 通常是網頁瀏覽器)發送一個特殊的 HTTP 響應。
這個響應的狀態碼通常是 301(永久重定向) 或 302(臨時重定向),並且包含一個 Location
頭,其值為新的 URL。以下是這個過程的詳細步驟:
redirect()
方法。Location
頭,其值為新的 URL。然後,這個響應會被送回到客戶端。Location
頭的值。Location
頭獲取的新 URL,再次發送一個 HTTP 請求到伺服器。透過這種方式,redirect()
方法可以引導瀏覽器從一個 URL 導向到另一個。
這種重定向是在伺服器端完成的,而客戶端的行為(例如瀏覽器)是透明的。
換句話說,使用者通常會看到他們的瀏覽器突然從一個頁面跳轉到另一個頁面,而且網址列中的 URL 也會改變。
以下是一個用來比較 HTTP, HTTPS 和 SSL 的 Markdown 表格:
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 表示層 | 負責資料的轉換和編碼,以便其能夠在資料上進行傳輸,例如 ASCII、Unicode、JPEG |
Layer 5: 💬Session 會話層 | 建立、管理和終止兩個網路節點之間的連結(會話),例如 NFS、SQL、RPC |
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 模型中並沒有明確的一層,但它們主要在會話層和傳輸層之間運作,為上層應用提供安全性保證。
TCP 是一種連接導向的協議,它確保數據包按照發送的順序到達,並重傳丟失的數據包,常用於需要可靠的傳輸的應用,如:網頁瀏覽、郵件傳輸等。
TCP 和 IP 的主要區別在於, IP (3層) 負責將數據包路由到目的地,TCP (4層) 接著負責數據的傳輸和控制。
用於 IP 網路診斷和報告錯誤的協議,例如 "ping" 命令
主要用於支援多播和 IP 電視(IPTV)等應用。多播允許一個來源節點向多個目標節點同時傳送資料,而不需要重複傳送。
一種數據鏈路協議,用於在直接連接的兩個節點之間建立網路連接,例如撥號和數據機連接。
雖然 PPP 在撥號上網中的使用已經大大減少(因為寬頻和行動網路的普及),但它仍然在某些場合下被使用,例如在某些 DSL(數位用戶線)和 VPN(虛擬私人網路)連接中。
一種用於構建區域網路(LAN)的技術標準。
它定義了如何進行數據包的傳輸,包括如何格式化數據、如何檢測和糾正錯誤等。
Ethernet 可以用於有線(例如,使用雙絞線或光纖)和無線(例如,Wi-Fi)網路。