X-Forwarded-For 是一个 HTTP 标头,用于识别原始用户的 IP 地址。我想知道这个标头在请求中的“哪里”被添加,以及“谁”实际上添加了它?是你的浏览器本身?你的 ISP?也许是 HTTP 服务器?还是目标服务器?从源到目标,它被添加在哪里,可能是在你的浏览器生成请求之后,或者在你的 ISP 之后,或者就在目标服务器之前,或者“它是在传入请求中添加的”?
答案1
通常,仅当存在需要识别发起者的上游代理时,正向代理才会插入此标头,否则,如果正向代理在互联网上的请求中插入此标头,则通常会被视为潜在敏感信息的泄露。
因此,它很少用于正向代理,而主要由反向代理用于将基于 Internet 的客户端识别到后端 Web 服务器,因为反向代理后面的 Web 服务器通常将所有连接视为来自反向代理的内部接口。
替代方案包括 - 代理协议,在实际请求之前以不同的格式通过连接发送这些数据 - 反向 NAT,将外部客户端 IP 保留在回程连接上
其他时候,你会在实践中看到 X-Forwarded-For,这是因为一些客户端插入标头以尝试获得提升的权限,例如如果反向代理传递值。
答案2
如果是正向代理(您的 Web 服务器使用的代理),代理可能会添加此标头以告知原始用户的 IP,以便路径上的 Web 服务器知道发出请求的 IP(即代理的 IP)不是实际发出请求的 IP。
如果存在反向代理(放置在 Web 服务器前面,以进行缓存、TLS、提供静态内容等),此标头包含反向代理看到的原始用户的 IP(其后面的服务器将看到所有来自反向代理 IP 的请求,因此此标头对于他们了解发出请求的真实 IP 至关重要)。
当然,如果没有涉及代理,则此标头不存在。