mirror of
https://github.com/hoppscotch/hoppscotch.git
synced 2026-04-25 16:55:59 +03:00
[PR #4951] [MERGED] fix(web): add explicit headers following prior normalization #4996
Labels
No labels
CodeDay
a11y
browser limited
bug
bug fix
cli
core
critical
design
desktop
discussion
docker
documentation
duplicate
enterprise
feature
feature
fosshack
future
good first issue
hacktoberfest
help wanted
i18n
invalid
major
minor
need information
need testing
not applicable to hoppscotch
not reproducible
pull-request
question
refactor
resolved
sandbox
self-host
spam
stale
testmu
wip
wont fix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/hoppscotch#4996
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/hoppscotch/hoppscotch/pull/4951
Author: @CuriousCorrelation
Created: 4/1/2025
Status: ✅ Merged
Merged: 4/4/2025
Merged by: @jamesgeorge007
Base:
patch← Head:fix-refactor-common-source-relay-call📝 Commits (1)
6a57188fix(web): add explicit headers following prior normalization📊 Changes
1 file changed (+10 additions, -0 deletions)
View changed files
📝
packages/hoppscotch-selfhost-web/src/platform/auth/desktop/index.ts(+10 -0)📄 Description
These changes add explicit
Content-Typeheaders to direct (vianativeinterceptor) authentication requests after changes made in PR #4931 that modified howContent-Typeheaders are handled in therelayplugin.Closes HFE-799
Closes #4949
In issue #4905, that was about Hoppscotch Agent and Native interceptor inconsistently handling
Content-Typeheaders. The issue had two main manifestations, duplicate headers - when overriding theContent-Typeheader in the UI or using OAuth2 authentication, the agent would send multipleContent-Typeheaders to the web server. This caused undefined behavior and often 400 errors for backends that don't accept duplicate headers. And inconsistent overrides - even when the content type was explicitly set (for example toapplication/json;v=2), the agent/native would inconsistently apply this override. Server logs revealed that roughly 50% of requests would use the correct override value, while the others would revert to the defaultapplication/json.The two-part solution implemented first in PR #4911 addressed the duplicate headers issue by implementing header normalization before final relay. This prevented duplicate headers with different casing from being sent and PR #4931 then resolved the inconsistent override behavior by removing the automatic
Content-Typeheader insertion in theContentHandlercomponent. As explained in the PR description, this was a temporary workaround until we implement a HTTP/2-compliant solution with proper normalization.While the fixes in PR #4911 and #4931 correctly resolved the header inconsistency issues for general API requests, they introduced a new problem: requests that previously relied on the automatic
Content-Typeinsertion now have noContent-Typeheader at all.This mainly affects direct calls around authentication flows in the desktop module, which were using the
content.json()functionality without explicitly settingContent-Typeheaders, relying on the automatic insertion that has now been removed.These changes add the now-required explicit
Content-Typeheaders to three authentication-related API calls in the desktop platform module:This will make sure that authentication flows continue to work properly with the native interceptor after the header handling changes.
As noted in PR #4931, this is considered a temporary solution. The plan is to revisit the content-type handling when we implement a more comprehensive HTTP/2-compliant header normalization system in the kernel layer.
While HTTP/1.1 headers are case-insensitive per RFC 7230, inconsistent handling across server implementations can treat differently-cased variations as distinct headers. HTTP/2 (RFC 7540) mandates converting all header field names to lowercase, which would prevent these issues altogether. In such cases, relying fully on
MediaTypeinterface from the kernel will help handling these edge-cases.Notes to reviewers
docker compose --profile default upto setup AIO thenpnpm dev:fullinpackages/hoppscotch-desktopto launch sh-desktop to test out the login flow.Demo
https://github.com/user-attachments/assets/5eac6142-5a28-48be-b6bd-46f738ef49a0
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.