Skip to content

quic: convert incoming :status header to number#63589

Open
hallss93 wants to merge 2 commits into
nodejs:mainfrom
hallss93:quic-h3-status-number
Open

quic: convert incoming :status header to number#63589
hallss93 wants to merge 2 commits into
nodejs:mainfrom
hallss93:quic-h3-status-number

Conversation

@hallss93

@hallss93 hallss93 commented May 26, 2026

Copy link
Copy Markdown

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 (92f48f4) to head (f442353).
⚠️ Report is 22 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #63589      +/-   ##
==========================================
+ Coverage   90.31%   90.32%   +0.01%     
==========================================
  Files         730      730              
  Lines      234653   234658       +5     
  Branches    43952    43951       -1     
==========================================
+ Hits       211926   211959      +33     
+ Misses      14474    14430      -44     
- Partials     8253     8269      +16     
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.

Signed-off-by: Hallison Melo <hallss93@hotmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
@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
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

Copy link
Copy Markdown
Collaborator

@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
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

8 participants