[Bug]: `theme dev` proxy 502s on cookie-heavy storefront responses (undici default 16 KiB `maxHeaderSize`)
Maintainer thường phản hồi trong vòng 2 ngày
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 68/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- node.js, typescript
Hướng nghiên cứu
Start by tracing the theme dev storefront proxy path that forwards requests and handles upstream fetch errors; the report does not name a source file or test. Reproduce with a cookie-heavy response and inspect how the proxy configures undici and turns failures into 502s. Done means the response succeeds above the default header limit and the overflow cause is actionable in the error output.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
[Bug]: theme dev proxy 502s on cookie-heavy storefront responses (undici default 16 KiB maxHeaderSize)
Description
shopify theme dev renders all pages as 502 ("Failed to render storefront") once the browser has cookies for the store. The storefront proxy dies parsing the upstream response headers: the response to a cookie'd request carries enough Set-Cookie headers to exceed undici's default 16 KiB header limit. The undici error (UND_ERR_HEADERS_OVERFLOW) is swallowed and surfaced as a bare TypeError: fetch failed → 502.
The theme, the dev theme, and the store are all fine — a cookie-less request to the same URL renders correctly.
Steps to reproduce
shopify theme pull --liveandshopify theme devon any store whose storefront sets a largeSet-Cookiecollection on cookie'd requests (this merchant: a Plus cosmetics store with cart/localization/tracking cookies).- Visit
http://127.0.0.1:9292/in a browser with an existing cookie jar for the store. - Every page render fails:
Failed to render storefront with status 502 (Bad Gateway).
URL: https://REDACTED-store.myshopify.com/?_fd=0&pb=0
TypeError: fetch failed
at Object.processResponse (node:internal/deps/undici/undici:12793:20)
at async ze (.../@shopify/cli/dist/chunk-CSNXCRPY.js:12:375)
- Open the same URL in an incognito window (empty cookie jar) — it renders.
curlto the same URL renders. Nodefetchfrom a fresh process renders. Only the CLI's cookie-forwarding proxy path fails.
Isolating the real error
The CLI wraps the undici error and drops error.cause. Attaching this shim via NODE_OPTIONS="--require /tmp/shim.cjs" and re-running theme dev reveals the cause:
const orig = globalThis.fetch;
globalThis.fetch = async (...args) => {
try { return await orig(...args); }
catch (e) {
console.error('[fetch-debug] URL:', String(args[0] && (args[0].url || args[0])).slice(0, 200));
console.error('[fetch-debug] cause code:', e.cause && e.cause.code, '| cause:', e.cause && e.cause.message);
throw e;
}
};
Output:
[fetch-debug] URL: https://REDACTED-store.myshopify.com/?_fd=0&pb=0
[fetch-debug] cause code: UND_ERR_HEADERS_OVERFLOW | cause: Headers Overflow Error
at Parser.trackHeader (node:internal/deps/undici/undici:7385:37)
at Parser.onHeaderValue (node:internal/deps/undici/undici:7376:14)
Supporting measurements
- Cookie-less
GET https://REDACTED-store.myshopify.com/?_fd=0&pb=0(with the CLI'sUser-Agent): 200, full 940 KB body, response header block ≈ 7.9 KB — under the 16 KiB cap, no failure. - Same request with the browser's cookie jar forwarded: the storefront returns a much larger
Set-Cookiecollection, pushing the response header block past 16 KiB →UND_ERR_HEADERS_OVERFLOW. - GET and POST (with
replace_templatesform bodies, up to 2 MB) both succeed without cookies, so neither method, body, nor header shape is the trigger — only response header size.
Suggested fix
- Configure the proxy's fetch/
Agentwith a largermaxHeaderSize(e.g. 64–128 KiB) instead of undici's 16 KiB default. Shopify storefronts legitimately set largeSet-Cookiecollections on cookie'd requests. - In the 502 error page, surface
error.cause.code(e.g.UND_ERR_HEADERS_OVERFLOW) instead of only the wrappedTypeError: fetch failedstack — it took aNODE_OPTIONSshim to find the actual cause.
Workaround
Use an incognito/private window for http://127.0.0.1:9292/, or clear site data for 127.0.0.1 and the store domain.
Environment
| CLI version | @shopify/[email protected] (pnpm global) |
| Node | v24.15.0 |
| OS | macOS 15 |
| Store | Shopify Plus storefront |
Possibly related: #8480 (theme dev proxy 502, cause not isolated — same proxy path, this report's cause code may explain it) and #3963.
- Ngôn ngữ chính
- TypeScript
- Star
- 753
- Fork
- 295
- Merge trung bình
- 2 ngày 8 giờ
- Pull request đã merge (30 ngày)
- 141
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của Shopify/cli
-
[Bug]: app deploy fails intermittently with ENOENT on <handle>.js.map when two UI extensions share a folderCó thể đã có người làm @efegokdemir đã nhận hôm nay. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 67/100
Shopify/cli#8823 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
Shopify/cli#8753 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
[Bug]: `shopify hydrogen dev` exits before listening when the npm registry is unreachable (p-cancelable onCancel-after-settle in latest-version chunk)Có thể đã có người làm @efegokdemir đã nhận 5 ngày trước. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
Maintainer thường phản hồi trong vòng 2 ngày
-
no-issue-activity
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
Shopify/cli#8388 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
Issue tương tự
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 84/100
Maintainer thường phản hồi trong vòng 1 ngày
-
core
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
vectorize-io/hindsight#5457 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
beginner friendly community contributions-welcome good first issue hacktoberfest help wanted testing up-for-grabs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
lukilabs/beautiful-mermaid#160 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
rescript-lang/rescript-lang.org#1420 ·
Maintainer thường phản hồi trong vòng 2 ngày