diff roundup/cgi/client.py @ 8019:16cc72cd9c17

fix: Send Vary: Accept-Encoding on any data that could be compressed This allows upstream caches to return the correct data even when compression is not in use. It is not sent if the content would never be compressed. I.E. size < 100 bytes, dynamic compression disabled, file would not benefit from compression (img/jpeg, img/png). Fix setVary to add header to vary list only if it's not already there. Found by redbot.org testing. References: https://www.stackpath.com/blog/accept-encoding-vary-important/
author John Rouillard <rouilj@ieee.org>
date Sun, 02 Jun 2024 18:22:53 -0400
parents 67922fd17454
children 60c98a8a23bd
line wrap: on
line diff
--- a/roundup/cgi/client.py	Sat Jun 01 03:52:02 2024 -0400
+++ b/roundup/cgi/client.py	Sun Jun 02 18:22:53 2024 -0400
@@ -2355,7 +2355,8 @@
         '''Vary header will include the new header. This will append
            if Vary exists.'''
 
-        if ('Vary' in self.additional_headers):
+        if ('Vary' in self.additional_headers and 
+            header not in self.additional_headers['Vary']):
             self.additional_headers['Vary'] += ", %s" % header
         else:
             self.additional_headers['Vary'] = header
@@ -2373,6 +2374,7 @@
         # abort if already encoded (e.g. served from
         # precompressed file or cache on disk)
         if ('Content-Encoding' in self.additional_headers):
+            # Vary: 'Accept-Encoding' is set when Content-encoding set
             return byte_content
 
         # abort if file-type already compressed
@@ -2381,6 +2383,8 @@
                 self.precompressed_mime_types):
             return byte_content
 
+        self.setVary('Accept-Encoding')
+
         encoder = None
         # return same content if unable to compress
         new_content = byte_content
@@ -2419,7 +2423,6 @@
             # and add Content-Encoding and Vary header.
             self.additional_headers['Content-Length'] = str(len(new_content))
             self.additional_headers['Content-Encoding'] = encoder
-            self.setVary('Accept-Encoding')
             try:
                 current_etag = self.additional_headers['ETag']
             except KeyError:

Roundup Issue Tracker: http://roundup-tracker.org/