編輯推薦
HTTP及相關核心Web技術方麵的著作
專傢詳解HTTP協議、深入說明Web工作原理
語言簡潔精確,細節圖解翔實
高效Web開發、Web程序員必備指南
HTTP是Web的基礎,這裏所說的Web,不僅隻是通常意義上的Browser/Server端的開發,而是Web Service。
HTTP初看上去似乎是非常簡單的協議,是的,HTTP 0.9確實是非常簡單的,簡單到隻有一個GET方法,更不用說什麼持久連接瞭。HTTP協議還有一個顯著特點,那就是其協議是明文的基於文本的。這使得通過工具與HTTP進行交互變得非常簡單,原始的telnet也可以發送HTTP請求(參考本書15頁)。
而大多數人對HTTP的瞭解也就是這種程度瞭(沒有讀此書之前的我也是這樣)。此書的意義在於,它讓你知道,HTTP不僅隻有一個簡單的GET,HTTP可以做為一種通用的分布式編程的協議。現如今Web上大行其道的所謂Restful Web Service,其基礎就是HTTP,而提齣Rest這個概念的Roy Fielding,也是HTTP協議(RFC2616)的主要作者之一
內容簡介
HTTP(HyperText Transfer Protocol,超文本傳輸協議)是Web客戶端與服務器交互文檔和信息時所使用的協議,是每個成功Web事務的幕後推手。眾所周知,我們每天訪問公司內部網絡、搜索絕版書籍、研究統計信息時所使用的瀏覽器的核心就是HTTP。但HTTP的應用遠不僅僅是瀏覽Web內容。由於HTTP既簡單又普及,很多其他網絡應用程序也選擇瞭它,尤其是采用SOAP和XML-RPC這樣的Web服務。
詳細解釋瞭HTTP協議,包括它是如何工作的,如何用它來開發基於Web的應用程序。但本書並不隻介紹瞭HTTP,還探討瞭HTTP有效工作所依賴的所有其他核心因特網技術。盡管HTTP是本書的中心內容,但本書的本質是理解Web的工作原理,以及如何將這些知識應用到Web編程和管理之中去,主要涵蓋HTTP的技術運作方式、産生動機、性能和目標,以及一些相關技術問題。
本書是HTTP協議及相關Web技術方麵的著作,主要內容包括:
HTTP方法、首部以及狀態碼
優化代理和緩存的方法
設計Web機器人和爬蟲的策略
Cookies、認證以及安全HTTP
國際化及內容協商
重定嚮及負載平衡策略
本書由具有多年實踐經驗的專傢編寫,通過簡潔語言和大量翔實的細節圖解幫助讀者形象地理解Web幕後所發生的事情,詳細說明瞭Web上每條請求的實際運行情況。要想高效地進行Web開發,所有Web程序員、管理員和應用程序開發者都應該熟悉HTTP。很多書籍隻介紹瞭Web的使用方式,而本書則深入說明瞭Web的工作原理。
作者簡介
David Gourley,Endeca的首席技術官(Chief TechnologyOfficer),負責Endeca産品的研究及開發。Endeca開發的因特網及內部網絡信息訪問解決方案為企業級數據的導航及研究提供瞭一些新的方式。在到Endeca工作之前,David是Inktomi基礎工程組的一員,他在那兒幫助開發瞭Inktomi的因特網搜索數據庫,是Inktomi的Web緩存産品的主要開發者。David在加州大學伯剋利分校獲得瞭計算機科學的學士學位,還擁有Web技術方麵的幾項專利。
BrianTotty,齣任瞭Inktomi公司(這是1996年他參與建立的一傢公司)研發部副總裁,在公司中他負責Web緩存、流媒體及因特網搜索技術的研發工作。他曾是SiliconGraphics公司的一名科學傢,他在那兒為高性能網絡和超級計算機係統設計軟件並對其進行優化。在那之前,他是蘋果計算機公司高級技術組的一名工程師。Brian在伊利諾伊大學Urbana-Champaign分校獲得瞭計算機科學的博士學位,在MIT獲得瞭計算機科學及電子工程的學士學位,在那裏他獲得瞭計算機係統研究的Organick奬。他還為加州大學擴展係統開發並講授瞭一些屢獲殊榮的因特網技術方麵的課程。
MarjorieSayer在Inktomi公司負責編寫Web緩存方麵的軟件。在加州大學伯剋利分校獲得瞭數學碩士和博士學位之後,一直緻力於數學課程的改革。從1990年開始緻力於能量資源管理、並行係統軟件、電話和網絡方麵的寫作。
Sailu Reddy目前在Inktomi公司負責嵌入式的性能增強型HTTP代理的開發。Sailu從事復雜軟件係統的開發已經有12年瞭,從1995年開始深入Web架構的研發工作。他是Netscape Web服務器、Web代理産品,以及後麵幾代産品的核心工程師。他具備HTTP應用程序、數據壓縮技術、數據庫引擎以及閤作管理等方麵的技術經驗。Sailu在亞裏桑那大學獲得瞭信息係統的碩士學位並握有Web技術方麵的多項專利。
AnshuAggarwal是Inktomi公司的工程總監。他領導著Inktomi公司Web緩存産品的協議處理工程組,從1997年就開始參與Inktomi的Web技術設計工作。Anshu在科羅拉多大學Boulder分校獲得瞭計算機科學的碩士和博士學位,從事分布式多處理器的內存一緻性技術研究。他還擁有電子工程的碩士和學士學位。Anshu撰寫瞭多篇技術論文,還擁有兩項專利。
目錄
第一部分 HTTP:Web的基礎
第1章 HTTP概述
1.1 HTTP——因特網的多媒體信使
1.2 Web客戶端和服務器
1.3 資源
1.3.1 媒體類型
1.3.2 URI
1.3.3 URL
1.3.4 URN
1.4 事務
1.4.1 方法
1.4.2 狀態碼
1.4.3 Web頁麵中可以包含多個對象
1.5 報文
1.6 連接
1.6.1 TCP/IP
1.6.2 連接、IP地址及端口號
1.6.3 使用Telnet實例
1.7 協議版本
1.8 Web的結構組件
1.8.1 代理
1.8.2 緩存
1.8.3 網關
1.8.4 隧道
1.8.5 Agent代理
1.9 起始部分的結束語
1.10 更多信息
1.10.1 HTTP協議信息
1.10.2 曆史透視
1.10.3 其他萬維網信息
第2章 URL與資源
2.1 瀏覽因特網資源
2.2 URL的語法
2.2.1 方案——使用什麼協議
2.2.2 主機與端口
2.2.3 用戶名和密碼
2.2.4 路徑
2.2.5 參數
2.2.6 查詢字符串
2.2.7 片段
2.3 URL快捷方式
2.3.1 相對URL
2.3.2 自動擴展URL
2.4 各種令人頭疼的字符
2.4.1 URL字符集
2.4.2 編碼機製
2.4.3 字符限製
2.4.4 另外一點說明
2.5 方案的世界
2.6 未來展望
2.7 更多信息
第3章 HTTP報文
3.1 報文流
3.1.1 報文流入源端服務器
3.1.2 報文嚮下遊流動
3.2 報文的組成部分
3.2.1 報文的語法
3.2.2 起始行
3.2.3 首部
3.2.4 實體的主體部分
3.2.5 版本0.9的報文
3.3 方法
3.3.1 安全方法
3.3.2 GET
3.3.3 HEAD
3.3.4 PUT
3.3.5 POST
3.3.6 TRACE
3.3.7 OPTIONS
3.3.8 DELETE
3.3.9 擴展方法
3.4 狀態碼
3.4.1 100~199——信息性狀態碼
3.4.2 200~299——成功狀態碼
3.4.3 300~399——重定嚮狀態碼
3.4.4 400~499——客戶端錯誤狀態碼
3.4.5 500~599——服務器錯誤狀態碼
3.5 首部
3.5.1 通用首部
3.5.2 請求首部
3.5.3 響應首部
3.5.4 實體首部
3.6 更多信息
第4章 連接管理
4.1 TCP連接
4.1.1 TCP的可靠數據管道
4.1.2 TCP流是分段的、由IP分組傳送
4.1.3 保持TCP連接的正確運行
4.1.4 用TCP套接字編程
4.2 對TCP性能的考慮
4.2.1 HTTP事務的時延
4.2.2 性能聚焦區域
4.2.3 TCP連接的握手時延
4.2.4 延遲確認
4.2.5 TCP慢啓動
4.2.6 Nagle算法與TCP_NODELAY
4.2.7 TIME_WAIT纍積與端口耗盡
4.3 HTTP連接的處理
4.3.1 常被誤解的Connection首部
4.3.2 串行事務處理時延
4.4 並行連接
4.4.1 並行連接可能會提高頁麵的加載速度
4.4.2 並行連接不一定更快
4.4.3 並行連接可能讓人“感覺”更快一些
4.5 持久連接
4.5.1 持久以及並行連接
4.5.2 HTTP/1.0+ keep-alive連接
4.5.3 Keep-Alive操作
4.5.4 Keep-Alive選項
4.5.5 Keep-Alive連接的限製和規則
4.5.6 Keep-Alive和啞代理
4.5.7 插入Proxy-Connection
4.5.8 HTTP/1.1持久連接
4.5.9 持久連接的限製和規則
4.6 管道化連接
4.7 關閉連接的奧秘
4.7.1 “任意”解除連接
4.7.2 Content-Length及截尾操作
4.7.3 連接關閉容限、重試以及冪等性
4.7.4 正常關閉連接
4.8 更多信息
4.8.1 HTTP連接
4.8.2 HTTP性能問題
4.8.3 TCP/IP
第二部分 HTTP結構
第5章 Web服務器
5.1 各種形狀和尺寸的Web服務器
5.1.1 Web服務器的實現
5.1.2 通用軟件Web服務器
5.1.3 Web服務器設備
5.1.4 嵌入式Web服務器
5.2 最小的Perl Web服務器
5.3 實際的Web服務器會做些什麼
5.4 第一步——接受客戶端連接
5.4.1 處理新連接
5.4.2 客戶端主機名識彆
5.4.3 通過ident確定客戶端用戶
5.5 第二步——接收請求報文
5.5.1 報文的內部錶示法
5.5.2 連接的輸入/輸齣處理結構
5.6 第三步——處理請求
5.7 第四步——對資源的映射及訪問
5.7.1 docroot
5.7.2 目錄列錶
5.7.3 動態內容資源的映射
5.7.4 服務器端包含項
5.7.5 訪問控製
5.8 第五步——構建響應
5.8.1 響應實體
5.8.2 MIME類型
5.8.3 重定嚮
5.9 第六步——發送響應
5.10 第七步——記錄日誌
5.11 更多信息
第6章 代理
6.1 Web的中間實體
6.1.1 私有和共享代理
6.1.2 代理與網關的對比
6.2 為什麼使用代理
6.3 代理會去往何處
6.3.1 代理服務器的部署
6.3.2 代理的層次結構
6.3.3 代理是如何獲取流量的
6.4 客戶端的代理設置
6.4.1 客戶端的代理配置:手工配置
6.4.2 客戶端代理配置:PAC文件
6.4.3 客戶端代理配置:WPAD
6.5 與代理請求有關的一些棘手問題
6.5.1 代理URI與服務器URI的不同
6.5.2 與虛擬主機一樣的問題
6.5.3 攔截代理會收到部分URI
6.5.4 代理既可以處理代理請求,也可以處理服務器請求
6.5.5 轉發過程中對URI的修改
6.5.6 URI的客戶端自動擴展和主機名解析
6.5.7 沒有代理時URI的解析
6.5.8 有顯式代理時URI的解析
6.5.9 有攔截代理時URI的解析
6.6 追蹤報文
6.6.1 Via首部
6.6.2 TRACE方法
6.7 代理認證
6.8 代理的互操作性
6.8.1 處理代理不支持的首部和方法
6.8.2 OPTIONS:發現對可選特性的支持
6.8.3 Allow首部
6.9 更多信息
第7章 緩存
7.1 冗餘的數據傳輸
7.2 帶寬瓶頸
7.3 瞬間擁塞
7.4 距離時延
7.5 命中和未命中的
7.5.1 再驗證
7.5.2 命中率
7.5.3 字節命中率
7.5.4 區分命中和未命中的情況
7.6 緩存的拓撲結構
7.6.1 私有緩存
7.6.2 公有代理緩存
7.6.3 代理緩存的層次結構
7.6.4 網狀緩存、內容路由以及對等緩存
7.7 緩存的處理步驟
7.7.1 第一步——接收
7.7.2 第二步——解析
7.7.3 第三步——查找
7.7.4 第四步——新鮮度檢測
7.7.5 第五步——創建響應
7.7.6 第六步——發送
7.7.7 第七步——日誌
7.7.8 緩存處理流程圖
7.8 保持副本的新鮮
7.8.1 文檔過期
7.8.2 過期日期和使用期
7.8.3 服務器再驗證
7.8.4 用條件方法進行再驗證
7.8.5 If-Modified-Since:Date再驗證
7.8.6 If-None-Match:實體標簽再驗證
7.8.7 強弱驗證器
7.8.8 什麼時候應該使用實體標簽和最近修改日期
7.9 控製緩存的能力
7.9.1 no-Store與no-Cache響應首部
7.9.2 max-age響應首部
7.9.3 Expires響應首部
7.9.4 must-revalidate響應首部
7.9.5 試探性過期
7.9.6 客戶端的新鮮度限製
7.9.7 注意事項
7.10 設置緩存控製
7.10.1 控製Apache的HTTP首部
7.10.2 通過HTTP-EQUIV控製HTML緩存
7.11 詳細算法
7.11.1 使用期和新鮮生存期
7.11.2 使用期的計算
7.11.3 完整的使用期計算算法
7.11.4 新鮮生存期計算
7.11.5 完整的服務器——新鮮度算法
7.12 緩存和廣告
7.12.1 發布廣告者的兩難處境
7.12.2 發布者的響應
7.12.3 日誌遷移
7.12.4 命中計數和使用限製
7.13 更多信息
第8章 集成點:網關、隧道及中繼
8.1 網關
8.2 協議網關
8.2.1 HTTP/*:服務器端Web網關
8.2.2 HTTP/HTTPS:服務器端安全網關
8.2.3 HTTPS/HTTP客戶端安全加速器網關
8.3 資源網關
8.3.1 CGI
8.3.2 服務器擴展API
8.4 應用程序接口和Web服務
8.5 隧道
8.5.1 用CONNECT建立HTTP隧道
8.5.2 數據隧道、定時及連接管理
8.5.3 SSL隧道
8.5.4 SSL隧道與HTTP/HTTPS網關的對比
8.5.5 隧道認證
8.5.6 隧道的安全性考慮
8.6 中繼
8.7 更多信息
第9章 Web機器人
9.1 爬蟲及爬行方式
9.1.1 從哪兒開始:根集
9.1.2 鏈接的提取以及相對鏈接的標準化
9.1.3 避免環路的齣現
9.1.4 循環與復製
9.1.5 麵包屑留下的痕跡
9.1.6 彆名與機器人環路
9.1.7 規範化URL
9.1.8 文件係統連接環路
9.1.9 動態虛擬Web空間
9.1.10 避免循環和重復
9.2 機器人的HTTP
9.2.1 識彆請求首部
9.2.2 虛擬主機
9.2.3 條件請求
9.2.4 對響應的處理
9.2.5 User-Agent導嚮
9.3 行為不當的機器人
9.4 拒絕機器人訪問
9.4.1 拒絕機器人訪問標準
9.4.2 Web站點和robots.txt文件
9.4.3 robots.txt文件的格式
9.4.4 其他有關robots.txt的知識
9.4.5 緩存和robots.txt的過期
9.4.6 拒絕機器人訪問的Perl代碼
9.4.7 HTML的robot-control元標簽
9.5 機器人的規範
9.6 搜索引擎
9.6.1 大格局
9.6.2 現代搜索引擎結構
9.6.3 全文索引
9.6.4 發布查詢請求
9.6.5 對結果進行排序,並提供查詢結果
9.6.6 欺詐
9.7 更多信息
第10章 HTTP-NG
10.1 HTTP發展中存在的問題
10.2 HTTP-NG的活動
10.3 模塊化及功能增強
10.4 分布式對象
10.5 第一層——報文傳輸
10.6 第二層——遠程調用
10.7 第三層——Web應用
10.8 WebMUX
10.9 二進製連接協議
10.10 當前的狀態
10.11 更多信息
第三部分 識彆、認證與安全
第11章 客戶端識彆與cookie機製
11.1 個性化接觸
11.2 HTTP首部
11.3 客戶端IP地址
11.4 用戶登錄
11.5 胖URL
11.6 cookie
11.6.1 cookie的類型
11.6.2 cookie是如何工作的
11.6.3 cookie罐:客戶端的狀態
11.6.4 不同站點使用不同的cookie
11.6.5 cookie成分
11.6.6 cookies版本0(Netscape)
11.6.7 cookies版本1(RFC 2965)
11.6.8 cookie與會話跟蹤
11.6.9 cookie與緩存
11.6.10 cookie、安全性和隱私
11.7 更多信息
第12章 基本認證機製
12.1 認證
12.1.1 HTTP的質詢/響應認證框架
12.1.2 認證協議與首部
12.1.3 安全域
12.2 基本認證
12.2.1 基本認證實例
12.2.2 Base-64用戶名/密碼編碼
12.2.3 代理認證
12.3 基本認證的安全缺陷
12.4 更多信息
第13章 摘要認證
13.1 摘要認證的改進
13.1.1 用摘要保護密碼
13.1.2 單嚮摘要
13.1.3 用隨機數防止重放攻擊
13.1.4 摘要認證的握手機製
13.2 摘要的計算
13.2.1 摘要算法的輸入數據
13.2.2 算法H(d)和KD(s,d)
13.2.3 與安全性相關的數據(A1)
13.2.4 與報文有關的數據(A2)
13.2.5 摘要算法總述
13.2.6 摘要認證會話
13.2.7 預授權
13.2.8 隨機數的選擇
13.2.9 對稱認證
13.3 增強保護質量
13.3.1 報文完整性保護
13.3.2 摘要認證首部
13.4 應該考慮的實際問題
13.4.1 多重質詢
13.4.2 差錯處理
13.4.3 保護空間
13.4.4 重寫URI
13.4.5 緩存
13.5 安全性考慮
13.5.1 首部篡改
13.5.2 重放攻擊
13.5.3 多重認證機製
13.5.4 詞典攻擊
13.5.5 惡意代理攻擊和中間人攻擊
13.5.6 選擇明文攻擊
13.5.7 存儲密碼
13.6 更多信息
第14章 安全HTTP
14.1 保護HTTP 的安全
14.2 數字加密
14.2.1 密碼編製的機製與技巧
14.2.2 密碼
14.2.3 密碼機
14.2.4 使用瞭密鑰的密碼
14.2.5 數字密碼
14.3 對稱密鑰加密技術
14.3.1 密鑰長度與枚舉攻擊
14.3.2 建立共享密鑰
14.4 公開密鑰加密技術
14.4.1 RSA
14.4.2 混閤加密係統和會話密鑰
14.5 數字簽名
14.6 數字證書
14.6.1 證書的主要內容
14.6.2 X.509 v3證書
14.6.3 用證書對服務器進行認證
14.7 HTTPS——細節介紹
14.7.1 HTTPS概述
14.7.2 HTTPS方案
14.7.3 建立安全傳輸
14.7.4 SSL握手
14.7.5 服務器證書
14.7.6 站點證書的有效性
14.7.7 虛擬主機與證書
14.8 HTTPS客戶端實例
14.8.1 OpenSSL
14.8.2 簡單的HTTPS客戶端
14.8.3 執行OpenSSL客戶端
14.9 通過代理以隧道形式傳輸安全流量
14.10 更多信息
14.10.1 HTTP安全性
14.10.2 SSL與TLS
14.10.3 公開密鑰基礎設施
14.10.4 數字密碼
第四部分 實體、編碼和國際化
第15章 實體和編碼
15.1 報文是箱子,實體是貨物
15.2 Content-Length: 實體的大小
15.2.1 檢測截尾
15.2.2 錯誤的Content-Length
15.2.3 Content-Length與持久連接
15.2.4 內容編碼
15.2.5 確定實體主體長度的規則
15.3 實體摘要
15.4 媒體類型和字符集
15.4.1 文本的字符編碼
15.4.2 多部分媒體類型
15.4.3 多部分錶格提交
15.4.4 多部分範圍響應
15.5 內容編碼
15.5.1 內容編碼過程
15.5.2 內容編碼類型
15.5.3 Accept-Encoding首部
15.6 傳輸編碼和分塊編碼
15.6.1 可靠傳輸
15.6.2 Transfer-Encoding首部
15.6.3 分塊編碼
15.6.4 內容編碼與傳輸編碼的結閤
15.6.5 傳輸編碼的規則
15.7 隨時間變化的實例
15.8 驗證碼和新鮮度
15.8.1 新鮮度
15.8.2 有條件的請求與驗證碼
15.9 範圍請求
15.10 差異編碼
15.11 更多信息
第16章 國際化
16.1 HTTP對國際性內容的支持
16.2 字符集與HTTP
16.2.1 字符集是把字符轉換為二進製碼的編碼
16.2.2 字符集和編碼如何工作
16.2.3 字符集不對,字符就不對
16.2.4 標準化的MIME charset值
16.2.5 Content-Type首部和Charset首部以及META標誌
16.2.6 Accept-Charset首部
16.3 多語言字符編碼入門
16.3.1 字符集術語
16.3.2 字符集的命名很糟糕
16.3.3 字符
16.3.4 字形、連筆以及錶示形式
16.3.5 編碼後的字符集
16.3.6 字符編碼方案
16.4 語言標記與HTTP
16.4.1 Content-Language首部
16.4.2 Accept-Language首部
16.4.3 語言標記的類型
16.4.4 子標記
16.4.5 大小寫
16.4.6 IANA語言標記注冊
16.4.7 第一個子標記——名字空間
16.4.8 第二個子標記——名字空間
16.4.9 其餘子標記——名字空間
16.4.10 配置和語言有關的首選項
16.4.11 語言標記參考錶
16.5 國際化的URI
16.5.1 全球性的可轉抄能力與有意義的字符的較量
16.5.2 URI字符集閤
16.5.3 轉義和反轉義
16.5.4 轉義國際化字符
16.5.5 URI中的模態切換
16.6 其他需要考慮的地方
16.6.1 首部和不閤規範的數據
16.6.2 日期
16.6.3 域名
16.7 更多信息
16.7.1 附錄
16.7.2 互聯網的國際化
16.7.3 國際標準
第17章 內容協商與轉碼
17.1 內容協商技術
17.2 客戶端驅動的協商
17.3 服務器驅動的協商
17.3.1 內容協商首部集
17.3.2 內容協商首部中的質量值
17.3.3 隨其他首部集而變化
17.3.4 Apache中的內容協商
17.3.5 服務器端擴展
17.4 透明協商
17.4.1 進行緩存與備用候選
17.4.2 Vary首部
17.5 轉碼
17.5.1 格式轉換
17.5.2 信息綜閤
17.5.3 內容注入
17.5.4 轉碼與靜態預生成的對比
17.6 下一步計劃
17.7 更多信息
第五部分 內容發布與分發
第18章 Web主機托管
18.1 主機托管服務
18.2 虛擬主機托管
18.2.1 虛擬服務器請求缺乏主機信息
18.2.2 設法讓虛擬主機托管正常工作
18.2.3 HTTP/1.1的Host首部
18.3 使網站更可靠
18.3.1 鏡像的服務器集群
18.3.2 內容分發網絡
18.3.3 CDN中的反嚮代理緩存
18.3.4 CDN中的代理緩存
18.4 讓網站更快
18.5 更多信息
第19章 發布係統
19.1 FrontPage為支持發布而做的服務器擴展
19.1.1 FrontPage服務器擴展
19.1.2 FrontPage術語錶
19.1.3 FrontPage的RPC協議
19.1.4 FrontPage的安全模型
19.2 WebDAV與協作寫作
19.2.1 WebDAV的方法
19.2.2 WebDAV與XML
19.2.3 WebDAV首部集
19.2.4 WebDAV的鎖定與防止覆寫
19.2.5 LOCK方法
19.2.6 UNLOCK方法
19.2.7 屬性和元數據
19.2.8 PROPFIND方法
19.2.9 PROPPATCH方法
19.2.10 集閤與名字空間管理
19.2.11 MKCOL方法
19.2.12 DELETE方法
19.2.13 COPY與MOVE方法
19.2.14 增強的HTTP/1.1方法
19.2.15 WebDAV中的版本管理
19.2.16 WebDAV的未來發展
19.3 更多信息
第20章 重定嚮與負載均衡
20.1 為什麼要重定嚮
20.2 重定嚮到何地
20.3 重定嚮協議概覽
20.4 通用的重定嚮方法
20.4.1 HTTP重定嚮
20.4.2 DNS重定嚮
20.4.3 任播尋址
20.4.4 IP MAC轉發
20.4.5 IP地址轉發
20.4.6 網元控製協議
20.5 代理的重定嚮方法
20.5.1 顯式瀏覽器配置
20.5.2 代理自動配置
20.5.3 Web代理自動發現協議
20.6 緩存重定嚮方法
20.7 因特網緩存協議
20.8 緩存陣列路由協議
20.9 超文本緩存協議
20.9.1 HTCP認證
20.9.2 設置緩存策略
20.10 更多信息
第21章 日誌記錄與使用情況跟蹤
21.1 記錄內容
21.2 日誌格式
21.2.1 常見日誌格式
21.2.2 組閤日誌格式
21.2.3 網景擴展日誌格式
21.2.4 網景擴展2日誌格式
21.2.5 Squid代理日誌格式
21.3 命中率測量
21.3.1 概述
21.3.2 Meter首部
21.4 關於隱私的考慮
21.5 更多信息
第六部分 附錄
附錄A URI方案
附錄B HTTP狀態碼
附錄C HTTP首部參考
附錄D MIME類型
附錄E Base-64編碼
附錄F 摘要認證
附錄G 語言標記
附錄H MIME字符集注冊錶
索引
精彩書摘
7.6.4 網狀緩存、內容路由以及對等緩存
有些網絡結構會構建復雜的網狀緩存(cache mesh),而不是簡單的緩存層次結構。網狀緩存中的代理緩存之間會以更加復雜的方式進行對話,做齣動態的緩存通信決策,決定與哪個父緩存進行對話,或者決定徹底繞開緩存,直接連接原始服務器。這種代理緩存會決定選擇何種路由對內容進行訪問、管理和傳送,因此可將其稱為內容路由器(content router)。
網狀緩存中為內容路由設計的緩存(除瞭其他任務之外)要完成下列所有功能。
根據URL在父緩存或原始服務器之間進行動態選擇。
根據URL動態地選擇一個特定的父緩存。
前往父緩存之前,在本地緩存中搜索已緩存的副本。
允許其他緩存對其緩存的部分內容進行訪問,但不允許因特網流量通過它們的緩存。
緩存之間這些更為復雜的關係允許不同的組織互為對等(peer)實體,將它們的緩存連接起來以實現共贏。提供可選的對等支持的緩存被稱為兄弟緩存(siblingcache)(參見圖7—10)。HTTP並不支持兄弟緩存,所以人們通過一些協議對HTTP進行瞭擴展,比如因特網緩存協議(Internet Cache Protocol,ICP)和超文本緩存協議(HyperText Caching Protocol,HTCP)。我們將在第20章討論這些協議。
7.7緩存的處理步驟
現代的商業化代理緩存相當地復雜。這些緩存構建得非常高效,可以支持HTTP和其他一些技術的各種高級特性。但除瞭一些微妙的細節之外,Web緩存的基本工作原理大多很簡單。對一條HTTP GET報文的基本緩存處理過程包括7個步驟(參見圖7—11)。
(1)接收——緩存從網絡中讀取抵達的請求報文。
(2)解析——緩存對報文進行解析,提取齣URL和各種首部。
(3)查詢——緩存查看是否有本地副本可用,如果沒有,就獲取一份副本(並將其保存在本地)。
(4)新鮮度檢測——緩存查看已緩存副本是否足夠新鮮,如果不是,就詢問服務器是否有任何更新。
(5)創建響應——緩存會用新的首部和已緩存的主體來構建一條響應報文。
(6)發送——緩存通過網絡將響應發迴給客戶端。
(7)日誌——緩存可選地創建一個日誌文件條目來描述這個事務。
前言/序言