# 3.8 Via
> 作者:肖鵬-SpiritLing 時間:2018-07-15
> `Via` 為了追蹤客戶端與服務器之間的請求和響應報文的傳輸路徑。
>
報文經過代理或網關時,會先在首部字段 `Via` 中附加該服務器的信息,然后再進行轉發。這個做法和 `traceroute` 及電子郵件的 `Received` 首部的工作機制很類似。
首部字段 `Via` 不僅用于追蹤報文的轉發,還可以避免請求回環的發生。所有必須在經過代理時附加該首部字段內容。
| 客戶端 | 數據包 | 代理服務器A | 數據包 | 代理服務器B |
| --- | --- | --- | --- | --- |
| ==> | GET / HTTP/1.1 | == | | |
| | | ==> | GET / HTTP/1.1 | == |
| | | ==> | Via: 1.0 gw.example.com(Squid/3.1) | == |
上圖用例中,在經過代理服務器 A 時,Via 首部附加了 “1.0 gw.example.com(Squid/3.1)”這樣的字符串值。行頭的1.0是指接受請求的服務器上應用的HTTP版本協議。接下來經過,若果存在更多的代理服務器亦是如此,在 `Via` 首部附加服務器信息,也可增加 1 個新的 `Via` 首部寫入服務器信息。
`Via` 首部是為了追蹤傳輸路徑,所以經常會和 `TRACE` 方法一起使用。比如,代理服務器接受到由 `TRACE` 方法發送過來的請求(其中 `Max-Forwards: 0`)時,代理服務器就不能再轉發該請求了。這種情況下,代理服務器會將自身的信息附加到 `Via` 首部后,返回該請求的響應。
> 作者:肖鵬-SpiritLing 時間:2018-07-15
- 首語
- 第一章 HTTP協議及網絡基礎
- 第二章 協議返回狀態碼
- 第三章 HTTP通用首部字段
- 第一節 Cache-Control字段
- 第二節 Connection 字段
- 第三節 Date 字段
- 第四節 Pragma 字段
- 第五節 Trailer 字段
- 第六節 Transfer-Encoding 字段
- 第七節 Upgrade 字段
- 第八節 Via 字段
- 第九節 Warning 字段
- 第四章 HTTP請求首部字段
- 第一節 Accept 字段
- 第二節 Accept-Charset 字段
- 第三節 Accept-Encoding 字段
- 第四節 Accept-Language 字段
- 第五節 Authorization 字段
- 第六節 Expect 字段
- 第七節 From 字段
- 第八節 Host 字段
- 第九節 If-Match 字段
- 第十節 If-Modified-Since 字段
- 第十一節 If-None-Match 字段
- 第十二節 If-Range 字段
- 第十三節 If-Unmodified-Since 字段
- 第十四節 Max-Forwards 字段
- 第十五節 Proxy-Authorization 字段
- 第十六節 Range 字段
- 第十七節 Referer 字段
- 第十八節 TE 字段
- 第十九節 User-Agent 字段
- 第五章 HTTP響應首部字段
- 第一節 Accept-Ranges 字段
- 第二節 Age 字段
- 第三節 ETge 字段
- 第四節 Location 字段
- 第五節 Proxy-Authenticate 字段
- 第六節 Retry-After 字段
- 第七節 Server 字段
- 第八節 Vary 字段
- 第九節 WWW-Authenticate 字段
- 第六章 HTTP實體首部字段
- 第一節 Allow 字段
- 第二節 Content-Encoding字段
- 第三節 Content-Language 字段
- 第四節 Content-Length 字段
- 第五節 Content-Location 字段
- 第六節 Content-MD5 字段
- 第七節 Content-Range 字段
- 第八節 Content-Type 字段
- 第九節 Expires 字段
- 第十節 Last-Modified 字段
- 第七章 Cookie相關和其他的首部字段