# 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相关和其他的首部字段