HTTP快取
HTTP快取是一種儲存和重用HTTP響應的機制,以減少伺服器的延遲和網路負載。HTTP快取可以存在於多個位置,包括客戶端(如瀏覽器快取)、代理伺服器(如公司或ISP的快取伺服器)以及原始伺服器的附近(如反向代理快取,例如Varnish或CDN節點)。
快取的實現通常遵循以下步驟:
-
快取儲存:
- 當一個HTTP請求發出時,快取會檢查其儲存,檢視是否有匹配的響應副本。
- 如果找到有效的快取條目,並且沒有過期(根據
Cache-Control
和Expires
頭部),快取將返回該響應。
-
新鮮度檢查:
- 如果快取的副本被認為是過時的(即已超過其
max-age
或Expires
時間),快取可能需要向原始伺服器進行新鮮度檢查。 - 新鮮度檢查可以透過條件GET請求實現,使用
If-Modified-Since
或If-None-Match
頭部來詢問伺服器內容是否有更新。
- 如果快取的副本被認為是過時的(即已超過其
-
驗證和更新:
- 如果伺服器返回
304 Not Modified
響應,這意味著快取的副本仍然是最新的。快取可以更新其頭部資訊,並將其作為響應傳送給客戶端。 - 如果伺服器返回一個新的
200 OK
響應,快取將替換其儲存中的舊副本,並將新響應傳送給客戶端。
- 如果伺服器返回
-
快取控制頭部:
Cache-Control
頭部中的指令控制著響應是否可以被快取,以及可以被快取多久。ETag
和Last-Modified
頭部提供了內容的版本資訊,用於在後續請求中進行驗證。
-
快取策略:
- 快取可能實施不同的策略來決定何時淘汰舊的快取條目,例如最少使用(LRU)策略。
- 快取還可能根據
Vary
響應頭部對請求進行細粒度的匹配,確保內容的正確版本被提供給正確的客戶端。
HTTP快取是一個複雜的主題,具體實現取決於許多因素,包括HTTP協議的細節、快取伺服器的配置以及原始伺服器的響應頭部。然而,基本原則是相同的:快取透過儲存並重新使用HTTP響應來減少重複的資料傳輸,從而提高效能並減少延遲。
例如,如果你想要確保一個響應不被快取,你可以使用以下頭部:
Cache-Control: no-store
如果你想要資源被快取30分鐘,可以使用:
Cache-Control: max-age=1800
Cache-Control
頭部可以組合多個指令,例如:
Cache-Control: public, max-age=1800
這表示響應是公開的,並且可以被快取最多30分鐘。
正確使用Cache-Control
頭部對於控制網頁的載入時間和減少伺服器負載都非常重要。它可以幫助開發者確保內容被適當地快取,這樣使用者就可以快速訪問網站,同時還能保證內容的新鮮度。
HTTP 常用的狀態碼及使用場景?
- 1xx:表示目前是協議的中間狀態,還需要後續請求
- 2xx:表示請求成功
- 3xx:表示重定向狀態,需要重新請求
- 4xx:表示請求報文錯誤
- 5xx:伺服器端錯誤
常用狀態碼:
- 101 切換請求協議,從 HTTP 切換到 WebSocket
- 200 請求成功,有響應體
- 301 永久重定向:會快取。這個資源只是暫時不能被訪問了,但是之後過一段時間還是可以繼續訪問,一般是訪問某個網站的資源需要許可權時,會需要使用者去登入,跳轉到登入頁面之後登入之後,還可以繼續訪問
- 302 臨時重定向:不會快取。與301 類似,都會跳轉到一個新的網站,但是 301 代表訪問的地址的資源被永久移除了,以後都不應該訪問這個地址,搜尋引擎抓取的時候也會用新的地址替換這個老的。可以在返回的響應的 location 首部去獲取到返回的地址。
- 304 協商快取命中
- 403 伺服器禁止訪問
- 404 資源未找到
- 400 請求錯誤
- 500 伺服器端錯誤
- 503 伺服器繁忙
計算網路分層
應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層
http和https之間的區別
HTTP(超文字傳輸協議)和HTTPS(安全超文字傳輸協議)之間的主要區別在於安全性。HTTPS是HTTP的安全版本,它在傳輸資料時提供了額外的安全層。以下是HTTP和HTTPS之間的關鍵區別:
-
加密:
- HTTP: 資料以明文形式傳輸,沒有加密,這意味著如果資料被截獲,第三方可以輕易閱讀這些資料。
- HTTPS: 透過使用SSL(安全套接層)或TLS(傳輸層安全)協議在客戶端和伺服器之間建立一個加密的連結。這確保了傳輸的資料對第三方來說是不可讀的,即使資料被截獲,也無法解密。
-
埠:
- HTTP: 預設使用80埠。
- HTTPS: 預設使用443埠。
-
URL字首:
- HTTP: 網址以
http://
開頭。 - HTTPS: 網址以
https://
開頭,‘s’代表‘安全’。
- HTTP: 網址以
-
安全證書:
- HTTP: 不需要伺服器擁有安全證書。
- HTTPS: 需要伺服器獲取並安裝SSL/TLS證書,以驗證伺服器的身份並建立安全連線。
-
資料完整性:
- HTTP: 不能保證資料在傳輸過程中不被篡改。
- HTTPS: 提供資料完整性驗證,確保資料在傳輸過程中未被篡改。
-
搜尋引擎最佳化(SEO):
- HTTP: 不提供搜尋引擎的安全加成。
- HTTPS: 被搜尋引擎(如Google)視為正面排名因素,可能會在搜尋結果中獲得更高的排名。
-
隱私保護:
- HTTP: 由於缺乏加密,使用者的隱私可能受到侵犯。
- HTTPS: 加密保護了使用者的隱私,防止敏感資訊(如登入憑據、支付資訊)被竊取。
由於這些區別,HTTPS已成為網站安全的標準,特別是對於那些處理敏感資料的網站。使用者和網站所有者都被鼓勵使用HTTPS來保護資料和通訊的安全。
https如何實現資料的安全傳輸
HTTPS透過結合HTTP協議和加密協議(通常是TLS,傳輸層安全,或其前身SSL,安全套接層)來實現安全的資訊傳輸。這個過程包括以下關鍵步驟:
-
TLS握手:
- 當使用者的瀏覽器嘗試與HTTPS網站建立連線時,它首先會發起一個TLS握手。
- 在握手過程中,客戶端和伺服器交換協議版本資訊,選擇加密演算法,並驗證伺服器的身份。
-
伺服器身份驗證:
- 伺服器必須向客戶端提供其TLS證書,該證書通常由第三方可信機構(證書頒發機構,CA)簽發,以驗證其身份。
- 客戶端將驗證證書的有效性,包括證書是否未過期,是否被可信的CA簽發,以及證書中的域名是否與正在訪問的網站匹配。
-
金鑰交換:
- 一旦伺服器被驗證,客戶端和伺服器將協商一個臨時的會話金鑰。
- 使用非對稱加密演算法安全地交換金鑰資訊,確保即使被第三方截獲,也無法解密會話金鑰。
-
對稱加密:
- 一旦會話金鑰被雙方安全地協商出來,它將被用於對稱加密後續的通訊。
- 對稱加密意味著客戶端和伺服器都使用同一個金鑰來加密和解密傳輸的資料,這使得資料傳輸過程中即使被截獲也無法被未授權的第三方讀取。
-
資料完整性:
- TLS還提供了資料完整性檢查,通常是透過訊息認證碼(MAC)或雜湊函式實現。
- 這確保了資料在傳輸過程中沒有被篡改,保護了資料的完整性。
-
安全會話:
- 一旦TLS握手完成,客戶端和伺服器之間的所有HTTP資料將被加密,建立了一個安全的會話。
- 使用者與網站的所有互動(包括瀏覽、表單提交、API呼叫等)都將透過這個加密的通道進行。
HTTPS透過這種方式確保了使用者資料的保密性、伺服器身份的真實性以及資料完整性,大大提升了線上交易和通訊的安全性。這就是為什麼現代瀏覽器和使用者都更傾向於使用HTTPS而不是不安全的HTTP。
TCP 三次握手&四次揮手過程
轉自https://www.xiaolincoding.com/network/3_tcp/tcp_interview.html#tcp-%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%86