In case both max-age and expires are present the values shall be translated to absolute times, compared and the earlier value shall be used.
In case none of the headers are defined, we use a static configurable refresh value like 10 minutes.
If in Cache-Control header the max-age = 0, keep this behavior as we are expecting the server wants us to do an immediate refresh. We are expecting a different value of max-age with the next response.
If an age header is present, that value shall be subtracted from the value defined in max-age.
51