1.報文是箱子,實體是貨物
報文實體由報文首部和實體主體組成
2.content-length:實體的大小
該首部指示出報文中實體主體的位元組大小
(1)檢測截尾
(2)錯誤的長度資訊
(3)對於持久連線必不可少
(4)如果進行了內容編碼,則是編碼後的位元組長度
(5)確定實體主體長度的規則
http/1.1建議對於沒有content-length首部的請求,傳送400/411響應
3.實體摘要
為檢測實體主體的資料是否被不經意地修改,傳送方可以在生成初始的主體時,生成乙個資料的校驗和,這樣接收方就可以通過檢查這個校驗和來捕獲所有意外的實體修改
伺服器使用content-md5首部傳送對實體主體執行md5演算法的結果,只有產生響應的原始伺服器可以計算並傳送content-md5首部
4.**型別和字符集
content-type首部說明了實體主體的mime型別,還支援可選的引數來進一步說明內容的型別,諸如charset等
5.內容編碼
(1)內容編碼過程
(2)內容編碼型別
content-encoding值
描述gzip
表明採用gnu zip編碼
compress
表明實體採用unix的檔案壓縮程式
deflate
表明實體是用zlib格式壓縮的
identity
表明沒有對實體進行編碼
以上三種編碼都是無損,gzip效率最高,使用最多
(3)accept-encoding首部:表明客戶端可以接收的編碼方式
6.傳輸編碼和分塊編碼
經過內容編碼的報文,只是對報文的實體主體部分進行了編碼;經過傳輸編碼的報文,編碼作用於整個報文,報文自身的結構發生了變化
(1)可靠傳輸
(2)transfer-encoding首部:用於告知接收方為了可靠的傳輸報文,已經對其進行了傳輸編碼;te首部:用於請求首部中,告知伺服器可以使用那些傳輸編碼擴充套件
(3)分塊編碼:把報文分割成若干個大小已知的塊;分塊編碼是一種傳輸編碼,因此是報文的屬性,而不是主體的屬性
(4)內容編碼和傳輸編碼的結合
(5)傳輸編碼的規則
7.隨時間變化的例項
8.驗證碼和新鮮度
(1)新鮮度:伺服器應當告知客戶端能夠將內容快取多長時間,在這個時間之內就是新鮮的;可以使用expires和cache-control首部
cache-control首部
指令報文型別
描述no-cache
請求在重新向伺服器驗證之前,不要返回文件的快取副本
no-store
請求不要返回文件的快取副本,不要儲存伺服器的響應
max-age
請求快取中的文件不能超過指定的使用期
max-stale
請求文件允許過期,但是不能超過指令中的指定的過期值
min-fresh
請求響應必須在指定的這段時間保持新鮮
no-transform
請求文件在傳送之前不允許轉換
only-if-cached
請求只有當文件在快取中才傳送,不要聯絡原始伺服器
public
響應響應可以被任何伺服器快取
private
響應響應可以被快取,但是只能被單個客戶端訪問
no-cache
響應有首部列表,可以快取並提供給客戶端,但要刪除首部列表;沒有指定首部,快取中的副本在沒有重新向伺服器驗證之前不能提供給客戶端
no-store
響應響應不允許被快取
no-transform
響應響應在提供給客戶端之前不能做任何形式的修改
must-revalidate
響應響應在提供給客戶端之前必須重新向伺服器驗證
proxy-revalidate
響應共享的快取在提供給客戶端之前必須向原始伺服器驗證
max-age
響應指定文件可以被快取的時間以及新鮮度的最長時間
s-max-age
響應指定文件作為共享快取的最長使用時間
(2)有條件的請求和驗證碼
僅當資源改變時才請求副本,這種特殊請求稱為有條件的請求
請求型別
驗證碼描述
if-modified-since
last-modified
如果在前一條響應的last-modified中說明的時間之後,資源的副本發生了變化,就傳送其副本
if-unmodified-since
last-modified
如果在前一條響應的last-modified中說明的時間之後,資源的副本沒有變化,就傳送其副本
if-match
etag
如果實體的標記與前一次響應首部中etag相同,就傳送資源副本
if-none-match
etag
如果實體的標記與前一次響應首部中etag不同,就傳送資源副本
http把驗證碼分為兩類:弱驗證碼和強驗證碼
弱驗證碼不一定能唯一標識乙個資源,而強驗證碼必須唯一標識
9.範圍請求
客戶端可以通過range首部來請求某個範圍的資料;伺服器通過accept-ranges向客戶端說明可以接受的範圍請求
10.差異編碼:通過交換物件改變的部分而不是完整的物件來優化傳輸效能
1.http對國際性內容的支援
伺服器通過content-type和content-language告知客戶端文件的字母表和語言
客戶端傳送accept-charset和accept-language告知伺服器它理解哪些字符集編碼和語言以及優先順序
2.字符集和http
(1)字符集是把字元轉換為二進位製碼的編碼:charset引數用來告知客戶端如何把內容中的二進位製碼轉換為字元
(2)工作過程:根據編碼方案解碼,使用編碼後的字符集找到字元,最後顯示
(3)字符集不對,字元就不對
(4)標準化的mime charset值
(5)content-type首部和charset首部以及meta標誌:如果首部中沒有標明字符集,html中的meta中也可能會有字元相關的資訊
(6)accept-charset首部:客戶端明確告知伺服器它支援哪些字元系統
其餘略內容協商技術:客戶端驅動、伺服器驅動以及透明驅動
技術概要
技術工作原理
優點缺點
客戶端驅動
客戶端發起請求,伺服器傳送可選項的列表,客戶端選擇
在伺服器端的實現最容易,客戶端可以選擇合適的內容
增加了時延:為了獲得正確的內容,至少要傳送兩次請求
伺服器驅動
伺服器檢查客戶端的請求首部集並決定提供哪個版本的頁面
比客戶端驅動要快,提供q值機制,允許伺服器近似匹配,還提供vary首部告知下游裝置如何對請求估值
如果結論不明確,伺服器要猜測
透明某個中間裝置代表客戶端進行請求協商
免除了web伺服器的協商開銷,比客戶端驅動要快
沒有正式規範
內容協商首部集
accept首部
實體首部
accept
content-type
accept-language
content-language
accept-charset
content-type
accept-encoding
content-encoding
1.主機託管服務
2.虛擬主機託管
(1)虛擬伺服器請求缺乏主機資訊:http/1.0中只傳送了url的路徑部分
(2)設法讓虛擬主機託管正常工作
通過埠號進行虛擬主機託管:使用者不願意
通過host首部進行虛擬主機託管
(3)http/1.1的host首部
3.使**更可靠
(1)映象的伺服器集群:伺服器集群是一排配置相同的web伺服器,互相可以替換。有乙個主原始伺服器和多個複製原始伺服器
(2)內容分發網路cdn:對特定內容進行分發的專門網路
(3)cdn中的反向**快取
(4)cdn中的**快取
4.讓**更快
伺服器集群和分布式**快取或反向**伺服器分散了網路流量,可以避免擁塞
略1.為什麼要重定向:可靠的執行http事務、最小化時延、節約網路頻寬
2.重定向到何地:web伺服器會根據每個ip來處理請求。將請求分攤到複製的伺服器中去,就意味著應該把對某特定url的每條請求都傳送到最佳的web伺服器上去
3.重定向協議概覽:重定向的目標是盡快將http報文傳送到可用的web伺服器上去
4.通用的重定向方法
(1)http重定向:處理重定向的伺服器找到可用的負載最小的內容伺服器,並將瀏覽器重定向到那台伺服器上去;http重定向的優點之一就是重定向伺服器知道客戶端的ip位址
缺點:需要原始伺服器進行大量處理來判斷要重定向到哪台伺服器上去;增加了使用者時延,因為訪問介面要進行兩次往返;如果重定向伺服器出故障,站點就會癱瘓
(2)dns重定向:dns輪轉,在web伺服器集群中平衡負載;大多數dns客戶端只會使用多位址集中的第乙個位址,為了均衡負載,大多數dns伺服器都會在每次完成查詢之後對位址進行輪轉;其他演算法包括負載均衡演算法、鄰接路由演算法以及故障遮蔽演算法
(3)任播定址
(4)ip mac **
(5)ip位址**
(6)網元控制協議
5.**的重定向方法
(1)顯式瀏覽器配置
(2)**自動配置
(3)web**自動發現協議
6.快取的重定向方法
7.網際網路快取協議(icp)
icp允許快取在其兄弟快取中查詢命中內容,避免查詢原始伺服器帶來的更多開銷
8.快取陣列路由協議
9.超文字快取協議
《HTTP權威指南》學習筆記 四
http權威指南 學習筆記 四 第四部分 實體 編碼和國際化 涵蓋http報文主體和web標準 第15章 實體和編碼 內容 報文實體由實體首部和實體主體組成。分塊密碼 報文 圖15.6 第16章 國際化 內容 國際化方面的兩個主要問題 字符集編碼 和 語言標記。http字符集的值說明如何把實體內容的...
HTTP權威指南
web 伺服器會為所有 http 物件資料附加乙個 mime 型別,content type image jpeg,content length 12984 伺服器資源名被稱為統一資源識別符號 uniform resource identifier,uri uri 就像網際網路上的郵政位址一樣,在世...
HTTP權威指南 HTTP報文
在開始學習本章之前,先來提一些問題,什麼是報文?如何建立報文?怎麼去理解報文?以及報文的用處有哪些?什麼是報文?可以這麼去理解,如果說http是網際網路的信使,那麼http報文就是它用來搬東西的包裹了。一 報文流 http報文是在http應用程式之間傳送的資料塊。這些資料塊以一些文字形式的元資訊開頭...