# Problems with ETags - Apollo router strips Etag

**URL:** <https://community.apollographql.com/t/problems-with-etags-apollo-router-strips-etag/8552>\
**Category:** Router\
**Tags:** server, router, rhai\
**Created:** [February 16, 2025, 4:19pm UTC](https://community.apollographql.com/t/problems-with-etags-apollo-router-strips-etag/8552 "2025-02-16T16:19:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jensileus](https://sea1.discourse-cdn.com/flex019/user_avatar/community.apollographql.com/jensileus/32/5700_2.png) [@Jensileus](https://community.apollographql.com/u/Jensileus)\
**Post date:** [February 16, 2025, 4:19pm UTC](https://community.apollographql.com/t/problems-with-etags-apollo-router-strips-etag/8552/1 "2025-02-16T16:19:00Z")

</div>

Here is a query directly to my microservice:  
`xx@xx:~$ curl -i -X POST -H “Content-Type: application/json” -H “X-User-Id: 4” -d ‘{ “query”: “query { hasUserPhoto }” }’ [http://localhost:5017/graphql](http://localhost:5017/graphql)  
HTTP/1.1 200 OK  
date: Sun, 16 Feb 2025 16:14:03 GMT  
server: uvicorn  
content-length: 32  
content-type: application/json  
vary: ETag  
etag: f827cf462f62848df37c5e1e94a4da74

`This is the the same query, but now to the Apollo Router: `\* Host localhost:4999 was resolved.

- IPv6: ::1
- IPv4: 127.0.0.1
- Trying [::1]:4999…
- connect to ::1 port 4999 from ::1 port 47860 failed: Connection refused
- Trying 127.0.0.1:4999…
- Connected to localhost (127.0.0.1) port 4999

> POST /graphql HTTP/1.1  
> Host: localhost:4999  
> User-Agent: curl/8.5.0  
> Accept: _/_  
> Content-Type: application/json  
> X-User-Id: 1  
> Content-Length: 37

\< HTTP/1.1 200 OK  
\< content-type: application/json  
\< vary: origin  
\< content-length: 31  
\< date: Sun, 16 Feb 2025 16:14:54 GMT  
\<

- Connection #0 to host localhost left intact`

My router.yaml as i run as conf file:  
`supergraph:  
introspection: true  
listen: 0.0.0.0:4999  
path: /graphql

sandbox:  
enabled: true

homepage:  
enabled: false

headers:  
all:  
request:  
- propagate:  
named: “X-User-Id”  
`  
What is the problem here? Do i need to propagate from the microservice?

---

<div class="post-metadata">

**Author:** ![shanemyrick](https://sea1.discourse-cdn.com/flex019/user_avatar/community.apollographql.com/shanemyrick/32/5474_2.png) [@shanemyrick](https://community.apollographql.com/u/shanemyrick)\
**Post date:** [February 18, 2025, 1:42am UTC](https://community.apollographql.com/t/problems-with-etags-apollo-router-strips-etag/8552/2 "2025-02-18T01:42:20Z")

</div>

Hey @Jensileus, thanks for posting.

The Router out of the box does not propagate response headers from downstream or subgraph services. We leave this up to the users to configure because we don’t know what to do if we were to have a conflicting header value. Keep in mind that your one query today might become a call to multiple services in the future with Federation and cause this conflict.

You can however set the Router response headers to the same value, you will just have to do so with customizations like Rhai scripts or Coprocessors.

See more details here: [Header Propagation - Apollo GraphQL Docs](https://www.apollographql.com/docs/graphos/routing/header-propagation#response-header-propagation)

---

<div class="post-metadata">

**Author:** ![Jensileus](https://sea1.discourse-cdn.com/flex019/user_avatar/community.apollographql.com/jensileus/32/5700_2.png) [@Jensileus](https://community.apollographql.com/u/Jensileus)\
**Post date:** [February 19, 2025, 8:21am UTC](https://community.apollographql.com/t/problems-with-etags-apollo-router-strips-etag/8552/3 "2025-02-19T08:21:47Z")

</div>

But with the plugin – and here it may be that I am wrong – will we send a entity for the graphql in general? Because since I use federatet i – of course- have multiple services and not all need a ETag. So i want to send the response header from the services that actually uses it. Will the plugin be able to send different ETags or will it send one general for all the services? From the apollo router?

---

<div class="post-metadata">

**Author:** ![shanemyrick](https://sea1.discourse-cdn.com/flex019/user_avatar/community.apollographql.com/shanemyrick/32/5474_2.png) [@shanemyrick](https://community.apollographql.com/u/shanemyrick)\
**Post date:** [February 19, 2025, 3:31pm UTC](https://community.apollographql.com/t/problems-with-etags-apollo-router-strips-etag/8552/4 "2025-02-19T15:31:37Z")

</div>

That logic would be up to you to write and determine if anything gets overridden or if you are only calling 1 service then it is much easier
