René's URL Explorer Experiment


Title: req.signal.aborted becomes true after request body parse / stream close in Node 24.18.0 · Issue #64390 · nodejs/node · GitHub

Open Graph Title: req.signal.aborted becomes true after request body parse / stream close in Node 24.18.0 · Issue #64390 · nodejs/node

X Title: req.signal.aborted becomes true after request body parse / stream close in Node 24.18.0 · Issue #64390 · nodejs/node

Description: Version v24.18.0 Platform Darwin Deniss-MacBook-Pro.local 25.5.0 Darwin Kernel Version 25.5.0: Mon Apr 27 20:41:19 PDT 2026; root:xnu-12377.121.6~2/RELEASE_ARM64_T8122 arm64 Subsystem No response What steps will reproduce the bug? In Nod...

Open Graph Description: Version v24.18.0 Platform Darwin Deniss-MacBook-Pro.local 25.5.0 Darwin Kernel Version 25.5.0: Mon Apr 27 20:41:19 PDT 2026; root:xnu-12377.121.6~2/RELEASE_ARM64_T8122 arm64 Subsystem No response W...

X Description: Version v24.18.0 Platform Darwin Deniss-MacBook-Pro.local 25.5.0 Darwin Kernel Version 25.5.0: Mon Apr 27 20:41:19 PDT 2026; root:xnu-12377.121.6~2/RELEASE_ARM64_T8122 arm64 Subsystem No response W...

Opengraph URL: https://github.com/nodejs/node/issues/64390

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"req.signal.aborted becomes true after request body parse / stream close in Node 24.18.0","articleBody":"### Version\n\nv24.18.0\n\n### Platform\n\n```text\nDarwin Deniss-MacBook-Pro.local 25.5.0 Darwin Kernel Version 25.5.0: Mon Apr 27 20:41:19 PDT 2026; root:xnu-12377.121.6~2/RELEASE_ARM64_T8122 arm64\n```\n\n### Subsystem\n\n_No response_\n\n### What steps will reproduce the bug?\n\nIn Node 24.18.0, `IncomingMessage.prototype.signal.aborted` becomes true after the incoming message body has finished parsing and the request stream closes, even though `req.aborted === false`. This makes `req.signal.aborted` unreliable for detecting actual client aborts.\n\n**Context**\n\n- Node version: v24.18.0\n- Environment: local dev, no reverse proxy\n- Framework: Express + body-parser\n- Route: PATCH /tables/1\n- Comparison: a separate GET route does not show the issue\n\n**Suggested reproduction steps**\n\n1. Start an Express server on Node 24.18.0\n2. Add middleware logging:\n- `req.aborted`\n- `req.complete`\n- `req.signal.aborted`\n- `req.socket.destroyed`\n3. Send a PATCH request with a JSON body\n4. Observe:\n- early middleware logs `signalAborted: false`\n- later the same request logs `signal.aborted: true`\n- `req.close `fires before `signal.aborted` becomes true\n\nCode to reproduce:\n```\n\n// repro.js\nimport express from \"express\";\nimport bodyParser from \"body-parser\";\n\nconst app = express();\napp.use(bodyParser.json());\n\napp.use((req, res, next) => {\n\tconsole.log(\"early middleware:\", {\n\t\turl: req.originalUrl,\n\t\tmethod: req.method,\n\t\taborted: req.aborted,\n\t\tcomplete: req.complete,\n\t\tsignalAborted: req.signal.aborted\n\t});\n\n\treq.once(\"close\", () => {\n\t\tconsole.log(\"req close event\", req.originalUrl, {\n\t\t\taborted: req.aborted,\n\t\t\tsignalAborted: req.signal.aborted\n\t\t});\n\t});\n\n\tnext();\n});\n\napp.patch(\"/tables/1\", async (req, res) => {\n\tconsole.log(\"route start:\", {\n\t\taborted: req.aborted,\n\t\tsignalAborted: req.signal.aborted\n\t});\n\n\tawait new Promise((resolve) => setTimeout(resolve, 200));\n\n\tconsole.log(\"route before res send\", {\n\t\taborted: req.aborted,\n\t\tsignalAborted: req.signal.aborted\n\t});\n\n\tres.json({ ok: true });\n});\n\napp.listen(3009, () => {\n\tconsole.log(\"listening on 3009\");\n});\n\n```\n\n### How often does it reproduce? Is there a required condition?\n\nReproduces with PATCH requests that have a JSON body.\n\n### What is the expected behavior? Why is that the expected behavior?\n\n`req.signal.aborted` should only become `true` when the client aborts the request (transport-level cancellation before or during request processing), not when the incoming message handling completes normally or when body parsing ends.\n\n### What do you see instead?\n\nFor a normal PATCH request with a body:\n\n- early request logs show `signalAborted: false`\n- request body parsing completes successfully\n- `req.close` triggers\n- later, `req.signal.aborted` becomes true\n- `req.aborted` remains false\n\nKey evidence\n\n- `req.close` event in route handler is logged before the route observes `signal.aborted === true`\n- `req.aborted` remains `false`\n- normal cURL request reproduces it\n- the same request type in a different route does not reproduce it\n\nThis means the new signal.aborted property is firing on request stream completion/closure rather than on genuine abort.\n\n### Additional information\n\n**Why this is a bug**\n\nThe new `req.signal `API is supposed to expose request cancellation state. If it becomes true after normal request completion or stream close, it is effectively useless for distinguishing real client aborts. This appears to be the Node HTTP internals abort signal being fired when the request handling completes, rather than when the client actually aborts. That behavior breaks the use case of `req.signal.aborted` for client abort detection.","author":{"url":"https://github.com/dnorrstrand","@type":"Person","name":"dnorrstrand"},"datePublished":"2026-07-09T11:37:53Z","url":"https://github.com/nodejs/node/issues/64390"}

react-profiling0
react-import-mapreact,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf
route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:13519660-08ee-81fc-47e9-5ceedb4f66ad
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idC27C:22CA14:58CA6C:730914:6AED28B7
html-safe-nonce9c23d2a3f7f440cc8bf8235fa087dda86be2b6ed68ae2364dd52df678c72b6a5
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDMjdDOjIyQ0ExNDo1OENBNkM6NzMwOTE0OjZBRUQyOEI3IiwidmlzaXRvcl9pZCI6Ijc1NjUwNTYwNzU4NDk2MDczNTEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac0a6dba3e5a1e0557dbea570bb48e6fc0b7af1db67c7b06afdcd8f06a66c76363
hovercard-subject-tagissue:4845878042
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/64390/issue_layout
twitter:imagehttps://opengraph.githubassets.com/098bfa877a058e34c2267fe80e9b8d88f94d157073da21dcfc5b0ebb5fc88fec/nodejs/node/issues/64390
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/098bfa877a058e34c2267fe80e9b8d88f94d157073da21dcfc5b0ebb5fc88fec/nodejs/node/issues/64390
og:image:altVersion v24.18.0 Platform Darwin Deniss-MacBook-Pro.local 25.5.0 Darwin Kernel Version 25.5.0: Mon Apr 27 20:41:19 PDT 2026; root:xnu-12377.121.6~2/RELEASE_ARM64_T8122 arm64 Subsystem No response W...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernamednorrstrand
hostnamegithub.com
expected-hostnamegithub.com
None9d95365dda0576efe9b71f45807595e396bd0ca9286fba5367a05048e6ddf8f2
turbo-cache-controlno-preview
go-importgithub.com/nodejs/node git https://github.com/nodejs/node.git
octolytics-dimension-user_id9950313
octolytics-dimension-user_loginnodejs
octolytics-dimension-repository_id27193779
octolytics-dimension-repository_nwonodejs/node
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id27193779
octolytics-dimension-repository_network_root_nwonodejs/node
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release98b41fa4b5635ceb45a4c54320fced73817ff290
ui-targetfull
theme-color#1e2327
color-schemelight dark
react-app-nameissues

Links:

Skip to contenthttps://github.com/nodejs/node/issues/64390#start-of-content
https://github.com/
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fnodejs%2Fnode%2Fissues%2F64390
GitHubRepository hosting, code review, and collaborationhttps://github.com/platform
CopilotAI coding agent for tasks, projects, and automated workhttps://github.com/features/copilot
ActionsCI/CD and automationhttps://github.com/features/actions
Code QualityQuality analysis, fixes, and enforcementhttps://github.com/features/code-quality
CodespacesCloud development environmentshttps://github.com/features/codespaces
Code SecurityVulnerability detection and remediationhttps://github.com/security/advanced-security/code-security
Secret ProtectionSecret scanning and leak preventionhttps://github.com/security/advanced-security/secret-protection
All Featureshttps://github.com/features
Documentationhttps://docs.github.com/en
Traininghttps://learn.github.com/skills
Certificationshttps://learn.github.com/credentials
Build with Copilothttps://github.com/features/ai
Customize Copilothttps://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview
Integrationshttps://github.com/marketplace
Trending reposhttps://github.com/trending
GitHub Sponsorshttps://github.com/open-source/sponsors
Developer articleshttps://github.com/resources/articles
ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place.https://github.blog/changelog/
Enterpriseshttps://github.com/enterprise
Teamhttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
See all industrieshttps://github.com/solutions/industry
Why GitHubhttps://github.com/why-github
Customer Storieshttps://github.com/customer-stories
Business insightshttps://github.com/solutions/executive-insights
Trust Centerhttps://github.com/trust-center
GitHub Advanced SecurityEnterprise-grade code securityhttps://github.com/security/advanced-security
Copilot for businessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Documentationhttps://docs.github.com/en
Resource centerhttps://github.com/resources
Bloghttps://github.blog/
Events & webinarshttps://github.com/resources/events
Community Forumhttps://github.com/orgs/community/discussions
Customer Storieshttps://github.com/customer-stories
Integrationshttps://github.com/marketplace
Customer supporthttps://help.github.com/
Traininghttps://learn.github.com/skills
GitHub Statushttps://www.githubstatus.com/
Abouthttps://github.com/about
Partnershttps://github.com/partners
Changeloghttps://github.blog/changelog/
GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub.https://githubuniverse.com/
Pricinghttps://github.com/pricing
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fnodejs%2Fnode%2Fissues%2F64390
Sign uphttps://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=nodejs%2Fnode
Reloadhttps://github.com/nodejs/node/issues/64390
Reloadhttps://github.com/nodejs/node/issues/64390
Reloadhttps://github.com/nodejs/node/issues/64390
nodejshttps://github.com/nodejs
nodehttps://github.com/nodejs/node
Codehttps://github.com/nodejs/node
Issues657 (657)https://github.com/nodejs/node/issues
Pull requests666 (666)https://github.com/nodejs/node/pulls
Actionshttps://github.com/nodejs/node/actions
Projectshttps://github.com/nodejs/node/projects
Security and qualityhttps://github.com/nodejs/node/security
Insightshttps://github.com/nodejs/node/pulse
https://github.com/nodejs/node
New issuehttps://github.com/login?return_to=https://github.com/nodejs/node/issues/64390
New issuehttps://github.com/login?return_to=https://github.com/nodejs/node/issues/64390
#64392https://github.com/nodejs/node/pull/64392
req.signal.aborted becomes true after request body parse / stream close in Node 24.18.0https://github.com/nodejs/node/issues/64390#top
#64392https://github.com/nodejs/node/pull/64392
httpIssues and PRs related to the http subsystem.https://github.com/nodejs/node/issues?q=state%3Aopen%20label%3A%22http%22
https://github.com/dnorrstrand
dnorrstrandhttps://github.com/dnorrstrand
on Jul 9, 2026https://github.com/nodejs/node/issues/64390#issue-4845878042
https://github.com/OP-Prajwal
OP-Prajwalhttps://github.com/OP-Prajwal
on Jul 9, 2026https://github.com/nodejs/node/issues/64390#issuecomment-4925574266
https://github.com/Archkon
Archkonhttps://github.com/Archkon
on Jul 9, 2026https://github.com/nodejs/node/issues/64390#issuecomment-4925864493
efekrsklhttps://github.com/efekrskl
httpIssues and PRs related to the http subsystem.https://github.com/nodejs/node/issues?q=state%3Aopen%20label%3A%22http%22
on Jul 9, 2026https://github.com/nodejs/node/issues/64390#event-27778074823
trivikrhttps://github.com/trivikr
Http IncomingMessage.signal is always aborted for POST requests #63532https://github.com/nodejs/node/issues/63532
on Jul 13, 2026https://github.com/nodejs/node/issues/64390#event-27886847956
https://github.com/dnorrstrand
dnorrstrandhttps://github.com/dnorrstrand
on Jul 21, 2026https://github.com/nodejs/node/issues/64390#issuecomment-5030652790
https://github.com/Archkon
Archkonhttps://github.com/Archkon
on Jul 21, 2026https://github.com/nodejs/node/issues/64390#issuecomment-5030698813
nodejs-github-bothttps://github.com/nodejs-github-bot
completedhttps://github.com/nodejs/node/issues?q=is%3Aissue%20state%3Aclosed%20archived%3Afalse%20reason%3Acompleted
#64392https://github.com/nodejs/node/pull/64392
on Jul 29, 2026https://github.com/nodejs/node/issues/64390#event-28664593674
nodejs-github-bothttps://github.com/nodejs-github-bot
on Jul 29, 2026https://github.com/nodejs/node/issues/64390#event-28664594014
http: avoid aborting IncomingMessage signal on normal closehttps://github.com/nodejs/node/commit/f8f8aa2ca9715aca1fc3a306a8c20b0682917dff
f8f8aa2https://github.com/nodejs/node/commit/f8f8aa2ca9715aca1fc3a306a8c20b0682917dff
aduh95https://github.com/aduh95
on Aug 3, 2026https://github.com/nodejs/node/issues/64390#event-28901700075
http: avoid aborting IncomingMessage signal on normal closehttps://github.com/nodejs/node/commit/e5b9ae105d2492238c8b265d4bebfb1c40393509
e5b9ae1https://github.com/nodejs/node/commit/e5b9ae105d2492238c8b265d4bebfb1c40393509
http: avoid aborting IncomingMessage signal on normal closehttps://github.com/nodejs/node/commit/6a71bac65064841ff6ec5b5f3ec810b134bfad81
6a71bachttps://github.com/nodejs/node/commit/6a71bac65064841ff6ec5b5f3ec810b134bfad81
http: avoid aborting IncomingMessage signal on normal closehttps://github.com/nodejs/node/commit/daee5467c0f33399a362c582028e83ac8dd1687c
daee546https://github.com/nodejs/node/commit/daee5467c0f33399a362c582028e83ac8dd1687c
http: avoid aborting IncomingMessage signal on normal closehttps://github.com/nodejs/node/commit/dfc192fdfb9489b51b61130e3f194d18145834b4
dfc192fhttps://github.com/nodejs/node/commit/dfc192fdfb9489b51b61130e3f194d18145834b4
http: avoid aborting IncomingMessage signal on normal closehttps://github.com/nodejs/node/commit/ee54d9d4d26459e3b369101d22c0ed36a6bc69ea
ee54d9dhttps://github.com/nodejs/node/commit/ee54d9d4d26459e3b369101d22c0ed36a6bc69ea
Sign up for freehttps://github.com/signup?return_to=https://github.com/nodejs/node/issues/64390
Sign in to commenthttps://github.com/login?return_to=https://github.com/nodejs/node/issues/64390
httpIssues and PRs related to the http subsystem.https://github.com/nodejs/node/issues?q=state%3Aopen%20label%3A%22http%22
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.