當使用者在瀏覽器中輸入一個網址並訪問一個網頁時,背後發生了一連串複雜的過程。這個過程可以大致分為以下幾個階段:
https://www.example.com
。www.example.com
)轉換成一個 IP 地址。這是通過一個叫做域名系統 (DNS) 的分散式數據庫完成的。CORS(Cross-Origin Resource Sharing,跨來源資源共享)是一種安全功能,允許網頁從與其不同來源(域、協議或埠 port)的伺服器請求資源。它是一種機制,用於放寬瀏覽器的同源政策,該政策預設情況下阻止網頁從不同來源的伺服器獲取資源。
最常見的實現 CORS 的方法是在伺服器端設置適當的 HTTP 響應頭。這些響應頭告訴瀏覽器,從特定來源的頁面可以訪問伺服器的資源。
前端代理:在某些情況下,可以在前端設置代理伺服器,將跨來源請求發送到代理,由代理將請求轉發到目標伺服器。這種方法避免了直接從客戶端到目標伺服器的跨來源請求。
JSONP
(僅限 GET
請求):JSONP 是一種老舊的技術,允許跨來源請求資料。它通過 <script>
標籤加載來自不同來源的 JavaScript
文件。但這種方法僅支持 GET
請求,且有安全風險。
curl
)發送請求,則不受限制。XSS
)。HTTP( HyperText Transfer Protocol,超文本傳輸協定)是用於在網路上傳輸資料的一種應用層協定,運行於 TCP/IP 協定之上。它是現代網際網路互動的基礎,是一種簡單、靈活且廣泛使用的網路協定。
無狀態(Stateless):
連接性(Connectionless):
可擴展性(Extensible):
PUT
、DELETE
)來擴展其功能。基於請求-響應模型:
支持多種資料類型:
MIME
類型在 HTTP 響應中指定內容類型。支持加密傳輸(HTTPS):
SSL/TLS
,得到 HTTPS,這為資料傳輸提供了資料加密和安全保證、完整性保護。支持中介和快取:
SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是用於網際網路通訊的安全技術標準,旨在保護網際網路數據傳輸的安全。它們主要用於網頁瀏覽器和伺服器之間的加密連接,但也可用於其他應用程序。
SSL: 是最初由 Netscape 開發的加密技術,用於保護網際網路通訊免受竊聽和篡改。SSL 通過在傳輸數據時加密信息來工作。
TLS: 是SSL的繼承者,提供更強的安全措施。TLS 使用更先進的加密算法,可以更有效地保護數據。大多數現代的安全通訊實際上是使用 TLS 協議,即使人們仍普遍稱之為 SSL。
兩者的主要目的是確保資料在網際網路上安全地傳輸,防止未經授權的存取和數據竊取。
網路中介,常見的一種形式是代理伺服器,是一種網路服務,它允許用戶端通過它與其他伺服器進行通訊。代理伺服器的主要功能是中繼數據,並有時候對數據進行處理。
功能: 代理伺服器可以提供各種功能,包括匿名瀏覽、內容過濾、快取資料來加速訪問速度、安全防護等。
匿名瀏覽: 通過代理伺服器訪問網際網路時,目標伺服器收到的是代理伺服器的 IP 地址,而不是用戶的實際 IP 地址。這樣可以增加用戶的隱私保護。
內容過濾和安全: 在企業和教育機構中,代理伺服器經常用來過濾和監控網路流量。它們可以阻止對不適當內容的訪問,並檢查數據以防止惡意軟體傳播。
快取功能: 代理伺服器可以儲存經常請求的資料。當相同的資料再次被請求時,代理伺服器可以從快取中提供這些資料,從而減少延遲和帶寬消耗。
總的來說,SSL/TLS和代理伺服器都是網際網路安全和高效運作的重要組成部分,但它們在功能和目的上有所不同。SSL/TLS專注於加密和數據安全,而代理伺服器則提供數據中繼、隱私保護和其他附加服務。
方法 | 功能 |
---|---|
GET | 用於請求資料,或某個資源的表示形式。通常只用於獲取資料,不應導致資源狀態的改變 |
POST | 用於向指定資源提交資料,或觸發伺服器端的操作。常用於提交表單資料或上傳文件 |
方法 | 傳輸方式 |
---|---|
GET | 將請求參數附加在 URL 上,通常可見於瀏覽器的地址欄中(例如 ?param1=value1¶m2=value2 ) |
POST | 將資料包含在請求的主體(body)中,不會顯示在 URL 上 |
方法 | 大小限制 |
---|---|
GET | 受 URL 長度限制,適合小量資料的傳輸 |
POST | 一般沒有大小限制,適合大量資料的傳輸,如文件上傳 |
方法 | 安全性 |
---|---|
GET | 因參數在 URL 中顯示,不適合傳輸敏感資料 |
POST | 資料不顯示在 URL 中,對敏感資料稍微安全,但未加密的 HTTP 連接中資料仍可見 |
方法 | 快取與書籤 |
---|---|
GET | 回應可被快取,且 GET 請求的 URL 可以被書籤 |
POST | 回應一般不被快取,且由於無可見 URL,POST 請求不能被書籤 |
方法 | 幂等性 |
---|---|
GET | 幂等的,多次執行同一請求效果相同 |
POST | 通常非幂等,每次請求可能對伺服器資源造成更改 |
狀態碼 | 說明 |
---|---|
400 | Bad Request - 請求格式錯誤或無法處理的請求 |
401 | Unauthorized - 請求需要使用者認證 |
403 | Forbidden - 伺服器拒絕執行請求 |
404 | Not Found - 請求的資源無法找到 |
405 | Method Not Allowed - 請求方法不被允許 |
狀態碼 | 說明 |
---|---|
500 | Internal Server Error - 伺服器內部錯誤 |
501 | Not Implemented - 伺服器不支持請求的功能 |
502 | Bad Gateway - 作為代理或閘道器的伺服器收到無效回應 |
503 | Service Unavailable - 伺服器暫時無法處理請求 |
504 | Gateway Timeout 伺服器作為閘道器時無法及時得到回應 |
WebSocket 是一種網路通訊協定,提供了在單個 TCP 連接上進行全雙工通訊的能力。它使得資料可以從客戶端到伺服器,以及從伺服器到客戶端實時且高效地傳輸,適用於需要快速響應的應用,如即時通訊和多人遊戲。
HTTP是用於傳輸超文本(例如網頁)的應用層協定。他基於請求-響應模型,在客戶端和伺服器之間傳輸資訊。是構建網路應用(特別是 World Wide Web)的基礎協定。
WebSocket 和 HTTP 都是網路協定,但它們在通訊方式、連接持久性和適用場景上有顯著差異。WebSocket 適合實時互動的應用,而 HTTP 則適用於傳統的請求-響應式網頁通訊。
特性 | WebSocket | HTTP |
---|---|---|
連接類型 | 全雙工通訊,允許同時進行雙向通信。 | 半雙工通訊,基於請求-回應模型。 |
持久性 | 連接保持開放,直到被使用者端或伺服器關閉。 | 在 HTTP/1.1 中支持持久連接,但每請求獨立。 |
用途 | 適合需要快速和持續互動的應用。 | 適用於一般的網頁請求和資料傳輸。 |
頭信息 | 初始連接時使用 HTTP 頭信息,之後不再需要。 | 每個請求和響應都包含 HTTP 頭信息。 |
協定轉換 | 初始使用 HTTP,然後升級到 WebSocket 協定。 | 始終使用 HTTP 協定。 |
特別適用於 | 實時通訊、在線遊戲和即時更新的應用。 | 傳統的網頁請求、文件下載和上傳等。 |
Cookie 是由網站伺服器發送到使用者瀏覽器並保存在本地的小型資料片段。它主要用於識別使用者,保存使用者偏好或其他瀏覽器會話 (session) 資訊。
Cookie 是由網站伺服器發送到用戶瀏覽器的一小段數據。瀏覽器會將這些數據存儲起來,並在之後的每次請求中將其發送回服務器。Cookie 通常用於識別用戶、保存用戶的偏好設置或其他與用戶會話(session)相關的資訊。
設置 Cookie:
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2023 07:28:00 GMT;
儲存 Cookie:
發送 Cookie:
Cookie: id=a3fWa;
伺服器讀取 Cookie:
Cookie 是網路應用中常用的技術,通過在客戶端儲存資料來實現狀態管理和個性化設置,但它也需要謹慎處理,以保護使用者的隱私和安全。
Web Storage 是 HTML5 提供的一種機制,允許網站在使用者的本地電腦上儲存資料。它分為兩種:localStorage
和 sessionStorage
。
都遵守同源政策 CORS,儲存在使用者端。
Web Storage 提供了更大的儲存空間和更加靈活的資料管理方式,
而 Cookie 則適用於需要伺服器每次都能讀取的情況。
特性 | Cookie | Web Storage |
---|---|---|
資料儲存位置 | 伺服器和使用者瀏覽器 | 僅使用者瀏覽器 |
資料儲存大小 | 較小(一般為 4KB 限制) | 較大(一般至少為 5MB) |
與伺服器通訊 | 每次 HTTP 請求都會發送 cookie 到伺服器 | 不會自動發送給伺服器 |
運作方式 | 主要用於追蹤用戶狀態 | 用於儲存大量資料以優化用戶體驗 |
資料生命週期 | 可設置過期時間 | localStorage 長期儲存 sessionStorage 會話儲存 |
快取(Cache)是一種技術,用於暫時儲存複製資料,以便在未來的請求中快速訪問這些資料。快取可以存在於不同的層級,如:瀏覽器快取、伺服器快取、代理快取等。
RESTful API( Representational State Transfer ,表述性狀態傳輸)是一種基於 HTTP 協定的網絡應用程序接口(API)設計風格。
RESTful API 以資源為中心,每個資源通常有一個相關的 URI。
HTTP 方法 | 操作 | 說明 |
---|---|---|
GET | 讀取 | 獲取資源的表示 |
POST | 創建 | 在伺服器上創建新資源 |
PUT | 更新 / 替換 | 更新現有資源或創建新資源 |
DELETE | 刪除 | 從伺服器上刪除資源 |
PATCH | 部分更新 | 對資源進行部分修改 |
RESTful API 的設計應遵循無狀態、客戶端-伺服器分離、統一接口等原則,以提高應用的可維護性、可擴展性和靈活性。
MVC 模式和純函數的概念
MVC(Model-View-Controller)是一種用於應用程式開發的架構模式,旨在分離關注點以提高應用的可維護性和擴展性,使得程式碼易於管理和擴展。
組件 | 職責 |
---|---|
Model(模型) | 負責業務邏輯和資料(狀態)的管理。通常涉及資料庫的讀寫操作。 |
View(視圖) | 負責顯示資料(模型)或使用者界面。用於呈現資料和接收使用者輸入。 |
Controller(控制器) | 處理使用者的輸入,並調用模型和視圖完成請求的處理。作為模型和視圖之間的協調者。 |
TLS(傳輸層安全性協定)握手是一種在客戶端與服務器之間建立安全通信連接的過程。這個過程確保了數據的隱私性和完整性。TLS 握手涉及多個步驟,其主要目的是:
TLS 握手是一個複雜的過程,涉及多個加密技術和安全措施。其目標是確保雙方能夠安全地交換密鑰信息,並建立一個安全的通信通道,以防止數據被竊聽和篡改。