Skip to content

HttpTransferCache collapses distinct binary POST bodies into the same cache key #70226

Description

@SkyZeroZx

Which @angular/* package(s) are the source of the bug?

common / http

Is this a regression?

No

Description

With POST requests enabled in HttpTransferCache, two requests with different binary bodies can end up sharing one cache entry. This matters for valid POST-based APIs such as Protobuf and gRPC, where the request body carries the input. The same cache-key rule also applies to other POST APIs, including GraphQL requests.

I reproduced this with two read-only Protobuf requests to the same URL. The bodies are valid, but different:

document 100: 0864    document 200: 08c801

Angular should treat these as separate requests and cache their responses separately. Instead, the request for document 200 gets the cached response for document 100; it never reaches the origin.

else if (typeof serializedBody !== 'string') {
  serializedBody = '';
}

HttpRequest.serializeBody() returns a Blob as-is. Because a Blob is not a string, makeCacheKey() turns it into ''. That means both Protobuf payloads have the same cache-key input before hashing.

Please provide a link to a minimal reproduction of the bug

See Repository: https://github.com/SkyZeroZx/angular-protobuf-transfercache-poc

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: common/httpIssues related to HTTP and HTTP Clientgemini-triagedLabel noting that an issue has been triaged by gemini

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions