《HTTP權威指南》閱讀筆記

2021-09-26 21:48:17 字數 3965 閱讀 2980

歷時兩個多月,終於把經典圖書《http權威指南》讀完了。雖然看上去厚厚的一本,實際上只要有一些計算機網路基礎,讀起來還是很順利的,並沒有想象中那麼難啃。

全書講的很細緻,涵蓋了http的方方面面,其中有一些都是些眾所周知的常識,比如前幾張關於http的基本介紹、url與資源等,但是也值得讀一讀,能夠把之前碎片化的認知給系統起來。

本文著重記錄一些筆者在讀書過程中印象比較深刻有趣的點。

報文的格式

請求報文

響應報文

方法方法

簡述是否包含主體

詳述get

從伺服器獲取乙份文件

否head

獲取文件的http首部,而不需要具體內容

否主要用於在不獲取資源的情況下獲取資源的狀態,比如資源的型別,是否存在,是否過期等資訊

post

向伺服器傳送需要處理的資料

是put

將請求的主體部分儲存到伺服器上

是delete

從伺服器上刪除乙個文件

否trace

對可能經過**伺服器傳送到伺服器上去的報文進行追蹤

否options

決定可以在伺服器上執行那些方法

否方法不僅僅只有這七種,還有一些擴充套件的方法,另外伺服器不一定把這七種全部都實現。

狀態碼範圍

簡述典型

1xx資訊提示

100:讓客戶端繼續它的表演,,用的不多

101:切換協議,根據update首部來切換協議,比如切換websocket協議

2xx成功

200:成功

3xx重定向

300:返回多個資源的url供客戶端選擇,比如返回多種語言的相同文件

301:永久重定向

302、303:臨時重定向

304:資源沒有被改變,比如客戶端傳送了乙個特殊的if-modified-since首部,說明只讀取某個時間之後修改的文件,而該文件實際沒被修改,服務端就會返回乙個304

4xx客戶端錯誤

401:授權錯誤

402:需要host欄位

403:禁止訪問

404找不到

5xx服務端錯誤

502首部

通用首部

首部名描述

備註connection

描述連線有關的選項,比如keep-alive

data

日期和時間標誌,說明報文是什麼時候建立的

update

給出傳送端想要公升級的新版協議

via顯示了報文經過的中間節點(**和閘道器)

請求首部

首部名描述

備註client_ip

客戶端ip

from

客戶端使用者的email位址

user-agent

將發起請求的應用程式名稱告知伺服器

host

給出了接收請求的伺服器的主機號和埠號

referer

從**來的

accept

告訴伺服器能夠傳送的**型別,比如text,html,***等

accept-charset

告訴伺服器能夠傳送哪些字符集,比如utf-8

accept-language

告訴伺服器能夠傳送哪些語言

accept-encoding

告訴伺服器能夠傳送哪些編碼方式,這個編碼方式是對實體進行編碼,比如gzip

if-match

如果實體標記與文件當前的實體標記相匹配,就獲取這份文件,比如md5值匹配

if-modified-since

如果在某個時間之後該文件被修改過,就獲取這份文件

if-none-match

如果標記不匹配就獲取,說明文件可能被修改過

if-range

允許對文件的某個範圍進行條件請求,常用於斷點續傳

if-unmodified-since

如果某個時間之後該文件沒被修改過,就獲取這份文件

range

如果伺服器支援範圍請求,就請求資源的指定範圍,用於斷點續傳

authorization

包含客戶端提供給伺服器的認證資料

cookie

客戶端向伺服器傳送乙個令牌

max-forward

從客戶端到伺服器的路上,最大能經過的次數

proxy-authorization

**認證時使用

proxy-connnect

與**建立連線時使用

響應首部

首部名描述

備註server

伺服器應用程式軟體的名稱和版本

accept-ranges

對此資源來說,伺服器可接收的範圍型別

set-cookie

在客戶端設定乙個令牌

實體首部

首部名描述

備註location

資源的實際位置,用於重定向

content-base

解析實體中的相對url時使用的基礎url

content-length

實體的長度

content-encoding

實體的編碼方式,比如gzip

content-language

實體的語言,比如en-us

content-md5

主體的md5校驗和

content-range

在整個資源中此實體表示的位元組範圍

content-type

這個主體的物件型別

expires

過期時間,快取時使用

last-modified

最後一次被修改的時間

tcp對http時延的影響

某個tcp端點關閉連線時,會在記憶體中維護乙個小的控制塊,用來記錄最近所關閉鏈結的ip位址和埠號。這類資訊會儲存一段時間(稱為2msl,通常為兩分鐘),用來確保兩分鐘內不會建立具有相同位址和埠號的新連線。

客戶端在兩分鐘內無法重複使用同乙個埠,而且埠的數量有限。所以連線率就被限制在了60000/120=500次/秒了。

連線管理

關於連線管理,http/2版本做出了很多優化,可以參考《http/2基礎教程》協議、特性、詳解

****的作用:內容過濾、安全防火牆、快取、文件訪問控制、匿名者、轉碼器

流量如何通過**?

快取快取的處理步驟:接收、解析、查詢、新鮮度檢測、構造響應、傳送、日誌

新鮮度檢測相關:expires首部說明過期時間,max-age最大生存時間。if-modified-since和if-none-match等首部可以與伺服器驗證是否新鮮、

閘道器協議閘道器:web閘道器在一側使用http協議,在另一側使用其他協議,比如郵件協議、ftp、https協議等

資源閘道器:收到http請求,呼叫其他應用程式api返回相應的資源。

隧道http隧道中可以傳輸一些其他協議,比如ssh等,這樣就可以通過80埠傳輸其他協議使得其他協議可以通過防火牆。

https:在ssl隧道中的http,ssl先握手建立安全的隧道,然後在隧道中進行http協議的傳輸。

中繼沒毛用

個性化接觸

服務端想為每個使用者提供個性化的服務,就需要能夠區分不同的客戶端,有以下幾種機制:

服務端返回401要求客戶端輸入認證資訊

客戶端將認證資訊(使用者名稱、密碼)填在authorization首部中,base64加密,傳送給服務端。

基本認證是非常不安全的,多用於企業內部。

摘要認證還沒有得到廣泛應用

主要思想是通過隨機數和密碼摘要來進行握手。

重定向的方法:

http報文解析

《HTTP權威指南》閱讀筆記(六)

一 對http 進行解釋,將其與web閘道器進行對比,並說明如何部署 http的 伺服器 分為公共 和私人 是代表客戶端是代表客戶端完成事務的中間人,既是web伺服器又是web客戶端。http客戶端會向 傳送請求報文,伺服器必須向web伺服器一樣,正確的處理請求和連線,然後返回響應。同時,自身要向伺...

《http權威指南》閱讀筆記(三)

http報文組成 請求報文 頭部資訊 header 實體資訊 entity method 主要包括,head,put,delete,get,post,head 其中head,get,post常用 put,delete 不常用 head只是需要返回影響頭部 響應報文 http 版本號 狀態碼 描述 頭...

《http權威指南》閱讀筆記(六)

閘道器 連線客戶端和伺服器端的 主要是用來進行協議轉換 客戶端閘道器 客戶端使用非http協議和閘道器互動,閘道器使用http協議和web伺服器互動 伺服器端閘道器 客戶端使用http協議和網管互動,網管使用非http協議和應用程式互動 比較常見的閘道器 http ftp https http ht...