`Vary: Origin` should not be set if the `Origin` request header is ignored
#332 aberto em 19 de out. de 2024
Description
The Vary HTTP response header is useful to ensure proper caching of CORS responses and prevent cache poisoning. However, it comes with a downside: (potentially significantly) increasing the cache size, since each client's origin will create a different cached value.
The standard mentions:
If
Access-Control-Allow-Originis set to * or a static origin for a particular resource, then configure the server to always sendAccess-Control-Allow-Originin responses for the resource — for non-CORS requests as well as CORS requests — and do not useVary.
In other words, if the CORS response is always the same regardless of the Origin request header, Vary: Origin should not be set. Currently, this module mostly gets it right except in two cases:
- If the
originoption is a function, regardless of the return value of that function (including'*'),Vary: Originshould be set, since that function might (and most likely did) use theOriginrequest header.
https://github.com/expressjs/cors/blob/53312a5bee605e2486fa734756abb3c0bc2f891d/lib/index.js#L41-L46
- If the
originoption is a string,Vary: Originshould not be set, sinceAccess-Control-Allow-Originis always the same value, and theOriginrequest header is ignored.
https://github.com/expressjs/cors/blob/53312a5bee605e2486fa734756abb3c0bc2f891d/lib/index.js#L47-L56