Cloudflare 作为反向代理运行,这就解释了它将如何处理 HTTP 标头,以及当流量通过 Cloudflare 时可能会更改或添加什么。
凭借这些添加的标头,Cloudflare 将所有 HTTP 标头从客户端原样传递到源站。
CF-IPCountry
此标头包含原始访问者的国家/地区代码。这是一个将具有国家/地区代码的双字符值,如果国家/地区代码未知,则其将为“XX”。通过在控制面板中启用 Cloudflare IP Geolocation,此标头被添加到请求中。
"Cf-Ipcountry:US"
CF-Connecting-IP
要为每个请求提供客户端(访问者)IP 地址,Cloudflare 添加了 CF-Connecting-IP 标头。
CF-Connecting-IPA.B.C.D"
其中 A.B.C.D 为客户端的 IP 地址,也称为原始访问者 IP 地址。
X-Forwarded-For
X-Forwarded-For 是代理(包括Cloudflare)使用的公认 HTTP 标头,用于传递请求中的其他 IP 地址。这通常与 CF-Connecting-IP 相同,但请求路径中可能有多层代理。
有两种可能的结果:
首先,如果发送到 Cloudflare 的请求中没有现有“X-Forwarded-For”标头,那么该标头将具有与 CF-Connecting-IP 标头相同的值,例如:
"X-Forwarded-For:A.B.C.D"
其中 A.B.C.D 为客户端的 IP 地址,也称为原始访问者 IP 地址。
其次,如果发送到 Cloudflare 的请求中存在“X-Forwarded-For”标头,则 Cloudflare 会将 HTTP 代理的 IP 地址附加到其值,作为列表中的最后一项。
"X-Forwarded-For:A.B.C.D[,X.X.X.X,Y.Y.Y.Y,]"
其中 A.B.C.D 为客户端的 IP 地址,也称为原始访问者 IP 地址。此示例中的 X.X.X.X 和 Y.Y.Y.Y 是标头值中路由的 IP 地址。
X-Forwarded-Proto
Cloudflare 还会附加一个 X-Forwarded-Proto 标头,其可以是 HTTP 或 HTTPS,具体取决于用户访问该站点所使用的协议,例如:
"X-Forwarded-Proto: https"
注意: 此标头仅在使用灵活 SSL 设置且访问者通过 HTTPS 向 Cloudflare 请求(Cloudflare 通过 HTTP 向源站请求)时才相关。在这种情况下,源站可以通过检查此标头来辨别访问者正在使用 HTTPS。
CF-RAY
CF-Ray 标头是具有该请求通过的数据中心的哈希。示例如下:
"Cf-Ray:230b030023ae2822-SJC"
您可以将 CF-Ray 标头添加到服务器日志,这可匹配您在 Cloudflare 上看到的请求与服务器日志中的请求。Enterprise 客户还可在Enterprise Log Share中查看通过 Cloudflare 发出的所有请求。
CF-Visitor
当前此标头是一个 JSON 对象,只包含一个名为“scheme”的键。其含义与以上 X-Forwarded-Proto 的含义相同 - 例如它将是 HTTP 或 HTTPS,并且其仅在您需要在 Cloudflare 设置中启用灵活 SSL 时才相关。
"Cf-Visitor: { \"scheme\":\"https\"}"
True-Client-IP * 仅限 Enterprise 计划 *
要为每个请求提供客户端(访问者)IP 地址,Cloudflare 添加了 True-Client-IP 标头。
"True-Client-IP:A.B.C.D"
其中 A.B.C.D 为客户端的 IP 地址,也称为访问者 IP 地址。此请求标头仅适用于 Enterprise 计划。
除标头名称外,True-Client-IP 和 Cf-Connecting-IP 之间没有区别。一些拥有传统设备的大型 Enterprise 客户需要一个类似 True-Client-IP 的标头,以避免更新防火墙或负载均衡器来读取自定义标头名称,因此 Cloudflare 提供了这种标头,从而轻松实现向后兼容。