使用自定义请求和响应标头,您可以指定负载均衡器可以添加到 HTTP(S) 请求和响应中的额外标头。根据负载均衡器检测到的信息,这些标头可以包含以下信息:
- 客户端的延迟时间
- 客户端 IP 地址的地理位置
- TLS 连接的参数
后端服务支持自定义请求标头,而后端服务和后端存储桶支持自定义响应标头。
默认情况下,负载均衡器会将某些标头添加到其作为代理在后端与客户端之间处理的所有 HTTP(S) 请求和响应。如需了解详情,请参阅目标代理。
准备工作
如有必要,请更新到 Google Cloud CLI 的最新版本:
gcloud components update
自定义标头的运作方式
自定义标头的运作方式如下:
当负载均衡器向后端转发请求时,负载均衡器会添加请求标头。
负载均衡器仅会向客户端请求添加自定义请求标头,而不会向健康检查探测添加自定义请求标头。如果后端需要将特定标头用于授权,而健康检查数据包中缺少该标头,则健康检查可能会失败。
负载均衡器会在将响应返回给客户端之前设置响应标头。
要启用自定义标头,您可以在后端服务或后端存储桶的属性中指定标头列表。
您可以将每个标头指定为 header-name:header-value 字符串。标头必须包含用于分隔标头名称和标头值的英文冒号。
标头名称必须符合以下要求:
- 标头名称必须是有效的 HTTP 标头字段名称定义(根据 RFC 7230)。
- 标头名称不得为
X-User-IP或CDN-Loop。 - 不得使用以下跃点标头:
Keep-Alive、Transfer-Encoding、TE、Connection、Trailer和Upgrade。根据 RFC 2616,这些标头不会由缓存存储,也不会由目标代理传播。 - 标头名称不得以
X-Google、X-Goog-、X-GFE或X-Amz-开头。 - 标头名称不能在已添加标头的列表中出现多次。
标头值必须符合以下要求:
- 标头值必须是有效的 HTTP 标头字段定义(根据 RFC 7230,不允许使用已过时的格式)。
- 标头值可以为空。
- 标头值可以包含一个或多个由花括号括起来的变量,这些变量可扩展为负载均衡器提供的值。标头值中允许使用的变量列表将在下一部分中介绍。
gcloud 命令行工具有一个用于指定请求标头的标志,即 --custom-request-header。使用此标志时,请务必将标头名称和标头值用直引号 (') 括起来。
该标志的常规格式如下:
--custom-request-header='HEADER_NAME:[HEADER_VALUE]'
以下示例展示了包含两个变量(client_region 和 client_city,用大括号括起)的标头值。
--custom-request-header='X-Client-Geo-Location:{client_region},{client_city}'
如果客户端位于加利福尼亚州山景城,则负载均衡器会添加如下所示的标头:
X-Client-Geo-Location:US,Mountain View
标头值支持的变量
以下变量可以出现在自定义标头值中。
| 变量 | 说明 |
|---|---|
cdn_cache_id |
用于传送请求的缓存实例的位置代码和 ID。此值与 Logging 中 Cloud CDN 请求日志的 jsonPayload.cacheId 字段中填充的值相同。 |
cdn_cache_status |
当前缓存状态。对于启用 Cloud CDN 的后端传送的任何对象,值可以是 hit、miss、revalidated、stale、uncacheable 或 disabled。 |
origin_request_header |
反映的是请求中跨域资源共享 (CORS) 用例的 Origin 标头的值。 |