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
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:
Angular should treat these as separate requests and cache their responses separately. Instead, the request for document
200gets the cached response for document100; it never reaches the origin.HttpRequest.serializeBody()returns aBlobas-is. Because aBlobis 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