Http 權威指南&HTTP結構

注:本文是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發展方向。

 

 

 

 

 

發佈了54 篇原創文章 · 獲贊 25 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章