Repository navigation
fix(event_handler): add Vary: Accept-Encoding to responses of compressed routes - #8711
Conversation
…t-valued Vary CORS now goes through _add_vary too, which also stops it from emitting 'Origin, Origin' or '*, Origin' when the route already set Vary.
leandrodamascena
left a comment
There was a problem hiding this comment.
Thanks @anishmehta24, confirmed on the REST resolver with and without gzip, with CORS, with a Vary already set as a string, as a list and as *. I pushed one commit on top: the CORS code from #8638 had its own copy of the merge logic, so I made it call your _add_vary instead. That also stops develop from emitting Origin, Origin and *, Origin when the route already set Vary. I added the list case to your test.
I'm approving now. This goes out in 3.40.0, so it will sit here for a while before I merge it. No rebase needed in the meantime, and you'll be credited in the release notes.
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #8711 +/- ##
===========================================
+ Coverage 97.01% 97.02% +0.01%
===========================================
Files 321 321
Lines 16432 16443 +11
Branches 1484 1487 +3
===========================================
+ Hits 15941 15954 +13
+ Misses 350 349 -1
+ Partials 141 140 -1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|



Issue number: closes #8710
Summary
Changes
When compression is enabled for the route or the response, the body depends on the request's
Accept-Encoding, but responses had noVaryfor it, so a shared cache could serve a gzipped body to a client without gzip (or the plain body to everyone).ResponseBuildernow addsAccept-EncodingtoVaryin that case, on both the compressed response and the plain one sent to a client without gzip. AVaryvalue the route already set is kept, the field isn't added twice, andVary: *is left as is. Compression turned off withResponse(compress=False)adds nothing.Added
test_compress_sets_vary_accept_encoding(8 cases) intests/functional/event_handler/required_dependencies/test_api_gateway.py; the four cases that expect a newVaryfail ondevelop. The event handler functional tests pass.User experience
Before: a
compress=Trueroute returnsContent-Encoding: gzipwith noVary. After: it also returnsVary: Accept-Encoding(or appends it to the route's ownVary), so caches keep the encodings apart.By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
Disclaimer: We value your time and bandwidth. As such, any pull requests created on non-triaged issues might not be successful.