From ec28b4b33e95ac4df862e67ac70c77895c21bb9c Mon Sep 17 00:00:00 2001 From: vtipparam Date: Wed, 18 Jan 2023 15:45:55 -0800 Subject: [PATCH] Use HeaderMap instead of plain Map for headers in `expressMiddleware` (#7313) The `expressMiddleware` handler uses a plain `Map` for the headers that results in case sensitive lookup on the headers. This makes the header `Apollo-Query-Plan-Experimental` ineffective when the ApolloServer is used with `expressMiddleware` handler. Resolves apollographql/federation#2337 --- .changeset/blue-planets-juggle.md | 5 +++++ packages/server/src/express4/index.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .changeset/blue-planets-juggle.md diff --git a/.changeset/blue-planets-juggle.md b/.changeset/blue-planets-juggle.md new file mode 100644 index 00000000000..c740d1918de --- /dev/null +++ b/.changeset/blue-planets-juggle.md @@ -0,0 +1,5 @@ +--- +'@apollo/server': patch +--- + +Allow case insensitive lookup on headers. Use HeaderMap instead of plain Map for headers in expressMiddleware. diff --git a/packages/server/src/express4/index.ts b/packages/server/src/express4/index.ts index 6dd8971c216..90bab238439 100644 --- a/packages/server/src/express4/index.ts +++ b/packages/server/src/express4/index.ts @@ -7,6 +7,7 @@ import type { HTTPGraphQLRequest, } from '../externalTypes/index.js'; import { parse as urlParse } from 'url'; +import { HeaderMap } from '../utils/HeaderMap.js'; export interface ExpressContextFunctionArgument { req: express.Request; @@ -56,7 +57,7 @@ export function expressMiddleware( return; } - const headers = new Map(); + const headers = new HeaderMap(); for (const [key, value] of Object.entries(req.headers)) { if (value !== undefined) { // Node/Express headers can be an array or a single value. We join