blob: 01399018d21f488189296ec41222cf5e381dbce0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
---
title: X-Forwarded-For
slug: Web/HTTP/Headers/X-Forwarded-For
tags:
- 请求首部
- 转发
- 首部
translation_of: Web/HTTP/Headers/X-Forwarded-For
---
<div>{{HTTPSidebar}}</div>
<p><strong><code>X-Forwarded-For</code></strong> (XFF) 在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。在消息流从客户端流向服务器的过程中被拦截的情况下,服务器端的访问日志只能记录代理服务器或者负载均衡服务器的IP地址。如果想要获得最初发起请求的客户端的IP地址的话,那么 X-Forwarded-For 就派上了用场。</p>
<p>这个消息首部会被用来进行调试和统计,以及生成基于位置的定制化内容,按照设计的目的,它会暴露一定的隐私和敏感信息,比如客户端的IP地址。所以在应用此消息首部的时候,需要将用户的隐私问题考虑在内。</p>
<p>HTTP 协议中的 {{HTTPHeader("Forwarded")}} 是这个消息首部的标准化版本。</p>
<p><code>X-Forwarded-For </code>也是一个电子邮件相关协议中用到的首部,用来表示一封电子邮件是从其他账户转发过来的。</p>
<table class="properties">
<tbody>
<tr>
<th scope="row">Header type</th>
<td>{{Glossary("Request header")}}</td>
</tr>
<tr>
<th scope="row">{{Glossary("Forbidden header name")}}</th>
<td>no</td>
</tr>
</tbody>
</table>
<h2 id="语法">语法</h2>
<pre class="syntaxbox">X-Forwarded-For: <client>, <proxy1>, <proxy2>
</pre>
<h2 id="指令">指令</h2>
<dl>
<dt><client></dt>
<dd>客户端的IP地址。</dd>
<dt><proxy1>, <proxy2></dt>
<dd>如果一个请求经过了多个代理服务器,那么每一个代理服务器的IP地址都会被依次记录在内。也就是说,最右端的IP地址表示最近通过的代理服务器,而最左端的IP地址表示最初发起请求的客户端的IP地址。</dd>
</dl>
<h2 id="示例">示例</h2>
<pre>X-Forwarded-For: 2001:db8:85a3:8d3:1319:8a2e:370:7348
X-Forwarded-For: 203.0.113.195
X-Forwarded-For: 203.0.113.195, 70.41.3.18, 150.172.238.178
</pre>
<p>其他非标准形式:</p>
<pre># Used for some Google services
X-ProxyUser-Ip: 203.0.113.19</pre>
<h2 id="规范">规范</h2>
<p>不属于任何一份既有规范。这个消息首部的标准版本是 {{HTTPHeader("Forwarded")}}.</p>
<h2 id="相关内容">相关内容</h2>
<ul>
<li>{{HTTPHeader("Forwarded")}}</li>
<li>{{HTTPHeader("X-Forwarded-Host")}}</li>
<li>{{HTTPHeader("X-Forwarded-Proto")}}</li>
<li>{{HTTPHeader("Via")}}</li>
</ul>
|