在处理HTTP/1.1请求时,Envoy默认会将请求与响应的头部的Key都转化为小写,这对于一些依赖头部大小写的应用产生了很大影响。PreserveCase
插件在启用后,能够让网关与Sidecar保持其转发的请求/响应头部的大小写,以解决头部大小写敏感应用的服务网格依赖问题。
前提条件
已部署入口网关。具体操作,请参见创建入口网关。
已在数据面集群部署httpbin服务。具体操作,请参见部署httpbin应用。
配置字段
名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
名称 | 数据类型 | 填写要求 | 默认值 | 描述 |
request_or_response | string | 必填 | - | 该参数指定了要保留请求头还是响应头的大小写,有三个可能取值:
|
配置示例
在示例的环境中访问httpbin服务,可以发现返回的响应头都为小写。对于一些依赖响应头大小写的应用,服务网格的这一默认行为可能造成严重的兼容性影响。
$ curl -I {网关ip地址}/get
HTTP/1.1 200 OK
server: istio-envoy
date: Thu, 16 Jun 2022 07:54:10 GMT
content-type: application/json
content-length: 504
access-control-allow-origin: *
access-control-allow-credentials: true
x-envoy-upstream-service-time: 2
此时所有的响应头都为小写。
启用PreserveCase
插件,并配置以下参数,以保持网关和Sidecar代理的请求响应头的大小写。
request_or_response: RESPONSE_HEADER
选择插件的生效范围为全局生效,并再次进行测试:
$ curl -I {网关ip地址}/get
HTTP/1.1 200 OK
Server: istio-envoy
Date: Thu, 16 Jun 2022 11:28:43 GMT
Content-Type: application/json
Content-Length: 507
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
x-envoy-upstream-service-time: 8
可以发现,在插件生效后,Date
、Content-Type
、Content-Length
等响应头都恢复了原先的大小写形式,而没有被强制转换成小写。
该文章对您有帮助吗?
- 本页导读 (1)
- 前提条件
- 配置字段
- 配置示例