Skip to content

quic: convert incoming :status header to number - #63589

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
hallss93:quic-h3-status-number
Aug 9, 2026
Merged

quic: convert incoming :status header to number#63589
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
hallss93:quic-h3-status-number

Conversation

@hallss93

@hallss93 hallss93 commented May 26, 2026

Copy link
Copy Markdown
Contributor

Fixes: #63557

Summary

When receiving HTTP/3 headers via QUIC, headers[':status'] was exposed as a
string. HTTP/2 converts the incoming :status pseudo-header to a number in
toHeaderObject() (lib/internal/http2/util.js). This mismatch makes it
awkward to port HTTP/2 code to HTTP/3.

Align HTTP/3 with HTTP/2 by converting :status to a number in
parseHeaderPairs() when building the header object from C++ name/value
pairs. This applies to initial response headers, informational (1xx)
headers (oninfo), and stream.headers.

Outgoing headers are unchanged: callers may still pass ':status': '200' or
':status': 200 when calling sendHeaders() / sendInformationalHeaders().

Test plan

  • Update existing QUIC H3 tests to expect numeric :status on receive

  • Add test/parallel/test-quic-h3-status-code-type.mjs covering 200, 204, and 404

  • Run (with QUIC enabled):

    node --experimental-quic --experimental-stream-iter --no-warnings \
      test/parallel/test-quic-h3-status-code-type.mjs \
      test/parallel/test-quic-h3-header-validation.mjs \
      test/parallel/test-quic-h3-informational-headers.mjs \
      test/parallel/test-quic-h3-request-response.mjs

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/quic

@nodejs-github-bot nodejs-github-bot added needs-ci PRs that need a full CI run. quic Issues and PRs related to the QUIC implementation / HTTP/3. labels May 26, 2026
@pimterry

Copy link
Copy Markdown
Member

@hallss93 Looks like the commit message here is failing the linting as it's not signed off, you'll need to update that with git commit --amend -s and then force push.

@codecov

codecov Bot commented May 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.32%. Comparing base (98fd6cb) to head (b9b662f).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #63589      +/-   ##
==========================================
- Coverage   90.32%   90.32%   -0.01%     
==========================================
  Files         759      759              
  Lines      248320   248330      +10     
  Branches    46868    46862       -6     
==========================================
- Hits       224296   224292       -4     
  Misses      15466    15466              
- Partials     8558     8572      +14     
Files with missing lines Coverage Δ
lib/internal/quic/quic.js 100.00% <100.00%> (ø)

... and 32 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@hallss93
hallss93 force-pushed the quic-h3-status-number branch from f442353 to 25644d0 Compare June 5, 2026 17:30
@hallss93

hallss93 commented Jun 5, 2026

Copy link
Copy Markdown
Contributor Author

@hallss93 Looks like the commit message here is failing the linting as it's not signed off, you'll need to update that with git commit --amend -s and then force push.

fixed

@pimterry pimterry added the request-ci Add this label to start a Jenkins CI on a PR. label Jun 8, 2026
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 8, 2026
@nodejs-github-bot

This comment was marked as outdated.

@pimterry pimterry added commit-queue Add this label to land a pull request using GitHub Actions. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. labels Jun 8, 2026
@nodejs-github-bot nodejs-github-bot added commit-queue-failed An error occurred while landing this pull request using GitHub Actions. and removed commit-queue Add this label to land a pull request using GitHub Actions. labels Jun 8, 2026
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator
Commit Queue failed
- Loading data for nodejs/node/pull/63589
✔  Done loading data for nodejs/node/pull/63589
----------------------------------- PR info ------------------------------------
Title      quic: convert incoming :status header to number (#63589)
Author     Hallison Pereira Melo <hallss93@hotmail.com> (@hallss93, first-time contributor)
Branch     hallss93:quic-h3-status-number -> nodejs:main
Labels     needs-ci, quic, commit-queue-squash
Commits    2
 - quic: convert incoming :status header to number
 - Merge branch 'nodejs:main' into quic-h3-status-number
Committers 2
 - Hallison Melo <hallss93@hotmail.com>
 - GitHub <noreply@github.com>
PR-URL: https://github.com/nodejs/node/pull/63589
Fixes: https://github.com/nodejs/node/issues/63557
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Tim Perry <pimterry@gmail.com>
------------------------------ Generated metadata ------------------------------
PR-URL: https://github.com/nodejs/node/pull/63589
Fixes: https://github.com/nodejs/node/issues/63557
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Tim Perry <pimterry@gmail.com>
--------------------------------------------------------------------------------
   ℹ  This PR was created on Tue, 26 May 2026 18:45:32 GMT
   ✔  Approvals: 2
   ✔  - Stephen Belanger (@Qard): https://github.com/nodejs/node/pull/63589#pullrequestreview-4378129270
   ✔  - Tim Perry (@pimterry): https://github.com/nodejs/node/pull/63589#pullrequestreview-4449032505
   ✔  Last GitHub CI successful
   ℹ  Last Full PR CI on 2026-06-08T13:56:50Z: https://ci.nodejs.org/job/node-test-pull-request/73976/
- Querying data for job/node-test-pull-request/73976/
✔  Build data downloaded
   ✔  Last Jenkins CI successful
--------------------------------------------------------------------------------
   ✔  No git cherry-pick in progress
   ✔  No git am in progress
   ✔  No git rebase in progress
--------------------------------------------------------------------------------
- Bringing origin/main up to date...
From https://github.com/nodejs/node
 * branch                  main       -> FETCH_HEAD
✔  origin/main is now up-to-date
- Downloading patch for 63589
From https://github.com/nodejs/node
 * branch                  refs/pull/63589/merge -> FETCH_HEAD
✔  Fetched commits as 45c7071b4a0d..04c9e28facb5
--------------------------------------------------------------------------------
Auto-merging doc/api/quic.md
Auto-merging lib/internal/quic/quic.js
error: commit 04c9e28facb599da6a23142450bbf8c85e32bcd0 is a merge but no -m option was given.
fatal: cherry-pick failed
[main dad2bd067b] quic: convert incoming :status header to number
 Author: Hallison Melo <hallss93@hotmail.com>
 Date: Tue May 26 15:40:36 2026 -0300
 22 files changed, 117 insertions(+), 44 deletions(-)
 create mode 100644 test/parallel/test-quic-h3-status-code-type.mjs
   ✘  Failed to apply patches
https://github.com/nodejs/node/actions/runs/27160616586

@trivikr

trivikr commented Jun 9, 2026

Copy link
Copy Markdown
Member

@hallss93 Can you please rebase onto main and remove the merge commit?

Instructions: https://github.com/nodejs/node/blob/main/doc/contributing/pull-requests.md#step-5-rebase

@bjohansebas bjohansebas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@bjohansebas bjohansebas added commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. and removed commit-queue-failed An error occurred while landing this pull request using GitHub Actions. commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. labels Jun 21, 2026
@jasnell

This comment was marked as resolved.

@jasnell
jasnell force-pushed the quic-h3-status-number branch from 04c9e28 to 861d2a4 Compare August 8, 2026 18:07
@jasnell

jasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

Rebased to address the merge conflicts

@jasnell

jasnell commented Aug 8, 2026

Copy link
Copy Markdown
Member

@Qard @pimterry ... can I ask for a stamp again on this, I can't stamp it any longer since I pushed the rebase

@nodejs-github-bot

This comment was marked as outdated.

Signed-off-by: Hallison Melo <hallss93@hotmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@jasnell
jasnell force-pushed the quic-h3-status-number branch from 861d2a4 to b9b662f Compare August 8, 2026 18:27
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@bjohansebas bjohansebas added the commit-queue Add this label to land a pull request using GitHub Actions. label Aug 9, 2026
@nodejs-github-bot nodejs-github-bot removed the commit-queue Add this label to land a pull request using GitHub Actions. label Aug 9, 2026
@nodejs-github-bot
nodejs-github-bot merged commit cbe18d8 into nodejs:main Aug 9, 2026
68 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in cbe18d8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commit-queue-squash Add this label to instruct the Commit Queue to squash all the PR commits into the first one. needs-ci PRs that need a full CI run. quic Issues and PRs related to the QUIC implementation / HTTP/3.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

quic: http/3 headers behave differently than http/2

9 participants