Loading
close

Envoy默认会将Header转换为小写

time 更新时间:2024-02-05 14:41:14

问题描述

Envoy缺省会把http header的key转换为小写,例如有一个httpheader Test-Upper-Case-Header: some-value,经过envoy代理后会变成 test-upper-case-header: some-value。这个在正常情况下没问题,RFC 2616 规范也说明了处理HTTP Header是大小写不敏感的

通常 header转换为小写不存在规范问题,但有些情况下对header大小写敏感会存在以下问题,例如:

  • 业务解析header依赖大小写。
  • 使用的SDK对Header大小写敏感,如读取Content-Length来判断response长度时依赖首字母大写。

解决方案

这种情况强制指定为TCP协议。将服务声明为TCP协议,不让istio进行七层处理,也就不会更改http header大小写了,但需要注意的是同时也会丧失istio的七层能力

当是集群内服务时,可以配置service使用TCP协议

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - number: 80
    name: tcp-web # 指定该端口协议为 tcp

当是集群外服务时,可以配置serviceEntry数据结构

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: cos
spec:
  hosts:
  - "private.cos.guangzhou.mycloud.com"
  location: MESH_INTERNAL
  addresses:
  - 169.254.0.47
  ports:
  - number: 80
    name: tcp
    protocol: TCP
  resolution: DNS
此篇文章对你是否有帮助?
没帮助
locked-file

您暂无权限访问该产品