Modify Response Headers

With Istio, you can apply traffic rules to route based on HTTP request headers. You can also use Istio to modify response headers. This could be useful if you want to strip headers generated by your application, or if you want to add response headers without changing your application code.

In this example, we will apply an Istio VirtualService to add a new header (hello:world), then remove the set-cookie header. Then, all client requests entering the service mesh through the default gateway will receive those modified headers.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: frontend-ingress
spec:
  hosts:
  - "*"
  gateways:
  - frontend-gateway
  http:
  - route:
    - destination:
        host: frontend
        port:
          number: 80
      headers:
        response:
          add:
            hello: world
          remove:
          - "set-cookie"

Before we apply the VirtualService, the frontend service returns the following response headers:

HTTP/1.1 200 OK
set-cookie: shop_session-id=432bef95-0d25-4754-80c8-3904c2e329e9; Max-Age=172800
date: Wed, 18 Sep 2019 16:26:01 GMT
content-type: text/html; charset=utf-8
x-envoy-upstream-service-time: 45
server: istio-envoy
transfer-encoding: chunked

Then when we kubectl apply the VirtualService, we see that Envoy is successfully configured to modify the response headers:

HTTP/1.1 200 OK
date: Wed, 18 Sep 2019 16:26:24 GMT
content-type: text/html; charset=utf-8
x-envoy-upstream-service-time: 85
hello: world
server: istio-envoy
transfer-encoding: chunked