For HTTP, you might consider the use of the ETag
response header and the If-None-Match
request header, and/or the use of the Last-Modified
response header and the If-Modified-Since
header; see if-modified-since vs if-none-match for a good discussion of these techniques.
The key is for the client to know when the resource was modified; the Cache-Control
directives don't really allow for proactively informing a client of when the resource was modified outside of any expiration policy, and thus other headers are needed for modification detection. That's where ETag
(a value that uniquely identifies that version of the resource), and/or Last-Modified
(a timestamp of when that version of the resource was last modified) come into play.
Hope this helps!