# HG changeset patch # User Anton Shestakov # Date 1468005984 -28800 # Node ID 7f0498bd284edb5120573203aa02aafc5c13a65c # Parent b4d117cee636be8a566f56e84d4b351a736a1299 hgweb: emit a valid, weak ETag Previously, ETag headers from hgweb weren't correctly formed, because rfc2616 (section 14, header definitions) requires double quotes around the content of the header. str(web.mtime) didn't do that. Additionally, strong ETags signify that the resource representations are byte-for-byte identical. That is, they can be reconstructed from byte ranges if client so wishes. Considering ETags for all hgweb pages is just mtime of 00changelog.i and doesn't consider of e.g. .hg/hgrc with description, contact and other fields, it's clearly shouldn't be strong. The W/ prefix marks it as weak, which still allows caching the whole served file/page, but doesn't allow byte-range requests. diff -r b4d117cee636 -r 7f0498bd284e mercurial/hgweb/common.py --- a/mercurial/hgweb/common.py Tue Jun 07 15:35:58 2016 +0200 +++ b/mercurial/hgweb/common.py Sat Jul 09 03:26:24 2016 +0800 @@ -187,7 +187,7 @@ os.environ.get("EMAIL") or "") def caching(web, req): - tag = str(web.mtime) + tag = 'W/"%s"' % web.mtime if req.env.get('HTTP_IF_NONE_MATCH') == tag: raise ErrorResponse(HTTP_NOT_MODIFIED) req.headers.append(('ETag', tag))