The AssetService sets the Expires header to control caching. The duration is calculated by the following lines of code:
- Time vended assets expire. Since a change in asset content is a change in asset URI, we want
- them to not expire ... but a year will do.
private final long _expireTime = _startupTime + 365 * 24 * 60 * 60 * 1000;
However, this causes a numeric overflow, resulting in an expiry in the order of about a month instead of a year. This means that browser clients will start issuing (unnecessary) conditional requests about a month after a Tapestry application is deployed, leading to unnecessary overhead.
The correct code is:
private final long _expireTime = _startupTime + 365 * 24 * 60 * 60 * 1000L;
(notice the final "L"). However, I'd argue to make the period longer, for example 10 years:
private final long _expireTime = _startupTime + 10 * 365 * 24 * 60 * 60 * 1000L;