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

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

Labels

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

6 participants