A non-profit, well-maintained website, with Admin that seem to know what they are doing, is sending dynamic pages that include all HTTP/1.1 headers (including a weak eTag) but no Last-Modified nor Expiry.
I'm interested in hearing from Webmasters with current experience on whether they have found the above situation to make any difference to Content Negotiation. I'm no longer a current Webmaster, but certainly my experiments during my years in that role suggested that both Last-Modified, Expiry + Cache-Control headers were essential, even with HTTP/1.1 browsers, in order to keep bandwidth at a minimum & server response at a maximum.
I want to be able to offer accurate help to the site, but do not want to look like a complete prat if, indeed, website interaction has changed so that the
Last-Modified header is no longer required and an
eTag header is sufficient. So, what is the up-to-date situation?
Further info: Content Negotiation is a bit of a geeky subject, so here is some brief info for novices.
This
old page on WebmasterWorld [webmasterworld.com] gives some basic information on the mechanics of Content Negotiation. It began with the introduction of
HTTP/1.0 in May 1996 [w3.org]. That is when browsers & web-servers began to interact with each other, and when (as just one example) the
304 Not Modified Response Header was introduced.
These are selected Response headers for one of the dynamic pages at the site in question:-
$ wget -O /dev/null -S https://www.example.com/way/17236956
--2019-06-11 19:15:05-- https://www.example.com/way/17236956
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Date: Tue, 11 Jun 2019 18:15:05 GMT
Server: Apache/2.4.29 (Ubuntu)
Cache-Control: max-age=0, private, must-revalidate
Vary: Accept-Language,Accept-Encoding
Content-Language: en
ETag: W/"6b6023e8efd4983110d4097ec2ee5e56"
Status: 200 OK
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Length: unspecified [text/html]
Saving to: ‘/dev/null’
…and a static file from the same site which basically makes the point that Apache always sends
both HTTP/1.1 + HTTP/1.0 headers:
$ wget -O /dev/null -S https://www.example.com/robots.txt
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Date: Tue, 11 Jun 2019 18:29:58 GMT
Server: Apache/2.4.29 (Ubuntu)
Last-Modified: Thu, 06 Jun 2019 17:26:06 GMT
ETag: "184-58aab0255d051"
Accept-Ranges: bytes
Content-Length: 388
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=100
Content-Type: text/plain; charset=utf-8