Skip to content

Commit ecc39b1

Browse files
committed
Address comments
1 parent 8c4a641 commit ecc39b1

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

lib/runtime/transports/http.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,12 @@ class HttpTransport extends TransportAdapter {
606606
* `cors` is disabled. For an allow-list, the request `Origin` is echoed
607607
* only when it matches (and `Vary: Origin` is set so caches don't mix
608608
* responses across origins).
609+
*
610+
* `Access-Control-Allow-Headers` reflects the browser's
611+
* `Access-Control-Request-Headers` when present, so authenticated or
612+
* custom-header requests (`Authorization`, `X-*`, …) pass preflight
613+
* rather than being limited to `content-type`. The reflected value is
614+
* added to `Vary` to keep caches correct.
609615
*/
610616
_applyCors(req, res) {
611617
if (!this.cors) return;
@@ -620,7 +626,15 @@ class HttpTransport extends TransportAdapter {
620626
}
621627
}
622628
res.setHeader('access-control-allow-methods', 'GET, POST, OPTIONS');
623-
res.setHeader('access-control-allow-headers', 'content-type');
629+
// Echo whatever headers the browser says it will send; fall back to
630+
// `content-type` for non-preflight requests that carry no such hint.
631+
const requested = req.headers['access-control-request-headers'];
632+
if (requested) {
633+
res.appendHeader('vary', 'Access-Control-Request-Headers');
634+
res.setHeader('access-control-allow-headers', requested);
635+
} else {
636+
res.setHeader('access-control-allow-headers', 'content-type');
637+
}
624638
res.setHeader('access-control-max-age', '86400');
625639
}
626640
}

0 commit comments

Comments
 (0)