注:本文是HTTP權威指南這本書讀的過程中記錄下來的一些case(隨心記錄)
五、Web服務器
Web服務器實現了HTTP和相關的TCP連接處理。管理Web服務器提供的資源,對Web服務器配置、控制及擴展方面的管理。
Web服務器一般做如下操作
1、建立連接----接受一個客戶端連接,或者不希望建立連接就關閉。
2、接收請求----讀取HTTP請求報文。
3、處理請求----對請求報文進行處理。
4、訪問資源----訪問報文中指定的資源。
5、構建響應----創建HTTP響應報文。
6、發送響應----將響應發送給客戶端。
7、記錄事務處理過程----將與已完成事務有關內容記錄在一個日誌文件中。
(1) 客戶端向服務器發請求後,服務端解析出客戶端的IP地址,建立連接,並將新連接添加到現存Web服務器連接列表中。Web服務器可以拒絕連接或者關閉連接。如果你設置一些認證。
(2)連接上有數據到達時,Web服務器會從網絡連接中讀取數據。
服務器就以nginx爲例了。當請求到達某一個server_name映射時會去root目錄下找對應location對應的文件。
(5)構建響應報文一般包括content-type標識MIME content-length 和響應體等等、
HTTP協議是無狀態的。每次請求是不相干的。
第六章、代理
Web代理服務器是介於客戶端和服務器之間扮演中間人角色。在各端點之間傳送HTTP報文。
nginx就是一個非常棒不錯的反向代理服務器。nginx相關:https://blog.csdn.net/finalheart/article/details/103655299
代理和網關的對比
代理連接的是使用相同協議的應用程序。例如瀏覽器與Web服務器通過HTTP協議建立通信。
網關連接的是不同協議的端點。網關扮演的是協議轉換器的角色。即使客戶端與服務端是不同的協議,通過網關也能完成事務。
有一些代理服務器是有網關的功能的(轉換協議)。
代理服務器的作用
監控流量。 控制訪問,對於一些認證不過或者限制的客戶端進行訪問控制(拒絕或者認證或者直接放行)。
web緩存。 隱藏真實服務器。
安全防火牆,跟訪問控制是一個意義。 轉碼。壓縮等。
代理服務器部署:
1.出口代理,將代理固定在本地網絡的出口點,以便控制本地網絡和大型因特網之間的流量。
2.入口代理,提高用戶的下載速度。或打開被牆的網站。
3.反向代理,隱藏真實服務器。緩存靜態資源。
代理是如何獲取流量的
這個一般作爲網站攻擊者會對這個東西非常熟悉。這意味着攻擊的方向。
1.修改客戶端。比如瀏覽器switchyomega設置代理訪問Google
2.修改網絡。這種就是訪問資源服務器被攔截。指向一個其他的服務器。可能是重定向到新的服務器,可能是攻擊。
3.修改DNS的命名空間。會直接假扮真實服務器的ip和域名。
4.修改Web服務器。返回HTTP報文時重定向到代理服務器。
代理服務器會遇到一些問題。 例如 請求報文中域名不全。 baidu 而不是 www.baidu.com
追蹤報文
Via首部(header)列出了報文途徑的每個中間節點有關的信息。(如果經過某些非HTTP協議的代理也會記錄下來)
Via字段用來記錄報文的轉發。診斷報文循環。
Via: 1.1 proxy-2.php.net , 1.0 cache.test.net
(protocol) version 域名/端點 (註釋) 是一個Via的數據。
如果不想Via的數據暴露在外面。可以進行假名替換。
TRACE 請求
代理服務器可以在轉發報文時對其作出修改。可以添加修改Header
使用trace請求會記錄整個請求報文被那個代理服務器修改以及怎麼修改的。
可以使用 Max-Forwards 值控制下一跳的次數。 Max-Forwards =2 就只能走兩個代理。 設置在請求header中。
第七章、緩存
緩存解決:1.冗餘的數據傳輸。 2.帶寬瓶頸。 3.瞬間擁塞。 4.距離時延。
緩存可以指定一個時間期限。
緩存分爲私有緩存和公有緩存。 私有緩存是用戶私有的,將文檔緩存到內存或者本地。
公有緩存是大家都用的。比如nginx做代理時緩存服務器的文檔。
緩存的處理步驟
1.接收
緩存從網絡中讀取抵達的請求報文。
2.解析
緩存對報文進行解析,提取出header和URL
3.查詢
去本地找副本(內存中或者磁盤中)
4.新鮮度檢測
HTTP通過緩存將服務器資源緩存一段時間,在這段時間內認爲是新鮮的。一旦超過這個時間就認爲過時了。需要請求服務器判斷是否超時了。
5.創建響應
緩存會保持原有服務器的信息,並且Date頭會保持在原始服務器產生這個對象的日期。
6.發送
7.日誌
保持副本的新鮮
文檔過期:在HTTP響應報文中會有 Header Cache-Control Expires 代表緩存的過期時間。 Cache-Control優先於Expires
Cache-Control:max-age 3600 (s) Cache-Control 還有一些別的緩存控制選項。
在文檔到期時進行服務器再驗證。 如果在驗證顯示的內容發生變化,就緩存新的數據到副本中。如果沒發生變化就獲取新的header和緩存日期和過期日期等。
通過條件方法也可以進行再驗證操作。
header中有IF-Modified-Since:<date> 和If-None-Match:<tags> 來進行再驗證。 這個是緩存主動向服務器發送的Get請求。
這時候如果有變化就緩存新的數據到緩存,沒變化就304返回。
實體標籤就是標註這個文檔的版本。版本變化就更新。
Cache-Control: must-revalidate header表示必須遵守緩存的過期時間。
第八章、集成點: 網關、隧道及中繼
網關是資源和應用程序之間的一個粘合劑。將多個應用程序整合起來,可以在不同協議中發揮作用,協議轉換。
第一個流行的應用程序網關API就是通用網關接口。CGI
Web隧道允許用戶通過HTTP連接發送非HTTP流量。
Web隧道是通過HTTP的connect 方法建立起來的。 connect創建的是TCP連接。
HTTP中繼是沒有完全遵循HTTP規範的簡單的HTTP代理。中繼負責處理HTTP中建立連接的部分,然後對字節進行盲轉發
第九章、Web機器人
決定後續寫Python/golang時寫寫爬蟲。
第十章、HTTP-NG(下一代系統)
HTTP-NG 工作組建議將協議模塊化爲三層。
第一層:報文傳輸層。 提高報文的傳輸性能。
第二層:遠程調用層。
第三層:Web應用層。
這個並不是現在已經開發存在的。而是1998年設想的一種HTTP發展方向。