[OSM-dev] Caching tiles and expiry header

Moataz Elmasry zaza1851983ml at googlemail.com
Thu Jul 8 23:28:36 BST 2010


Mathieu Arnold wrote:
> +--On 5 juillet 2010 17:27:03 +0200 Moataz Elmasry
> <zaza1851983ml at googlemail.com> wrote:
> | Hello List
> | 
> | I use http://tile.openstreetmap.org/${z}/${x}/${y}.png to display the map
> | in my web application
> | I use a filter mechanism in the servlet, where an expiry header and
> | maximum age headers are added to the image requests, so that they will be
> | cached for a while on the client browser. These are just for common
> | images that the application use like tooltip.png and button.png and
> | such...These are called from the cache just fine
> | 
> | Now to do the same for osm tiles I added a proxy through which the tiles
> | are requested and then expiry headers are added to these tiles, Say
> | http://myapplciation.com/proxy?url=http://tile.openstreetmap.org/${z}/${x
> | }/${y}.png. This is the layer address in OpenLayers.Layer.OSM
> | 
> | An expiry header is added correctly to osm tiles. The problem is that the
> | imagename in the request is different than in the response, so if I'm
> | requesting |http://tile.openstreetmap.org/16/34687/21558.png I get an
> | image called 2736BB16d01.png in my cache. So that by the next call this
> | image won't be fetched from the cache and instead called again from the
> | server and so on.
> | 
> | Is there a way to force the browser to load the images from its cache if
> | available?
>
> Well, you should not create a new expire header, but you should forward the
> expires and etag from the original request, and try to use that etag header
> :
>
> $ curl -I http://tile.openstreetmap.org/16/34687/21558.png
> HTTP/1.0 200 OK
> Date: Mon, 05 Jul 2010 15:27:25 GMT
> Server: Apache/2.2.8 (Ubuntu)
> ETag: "ae22fe7a91ce525e988b2da52f63a4a4"
> Content-Length: 16897
> Cache-Control: max-age=18482
> Expires: Mon, 05 Jul 2010 20:35:27 GMT
> Content-Type: image/png
> Age: 1360
> X-Cache: HIT from konqi.openstreetmap.org
> X-Cache-Lookup: HIT from konqi.openstreetmap.org:3128
> Via: 1.1 konqi.openstreetmap.org:3128 (squid/2.7.STABLE7)
> Connection: close
>
> $ curl -H 'If-None-Match: "ae22fe7a91ce525e988b2da52f63a4a4"' -I
> http://tile.openstreetmap.org/16/34687/21558.png
> HTTP/1.0 304 Not Modified
> Date: Mon, 05 Jul 2010 15:27:25 GMT
> Content-Type: image/png
> Expires: Mon, 05 Jul 2010 20:35:27 GMT
> ETag: "ae22fe7a91ce525e988b2da52f63a4a4"
> Age: 1392
> X-Cache: HIT from konqi.openstreetmap.org
> X-Cache-Lookup: HIT from konqi.openstreetmap.org:3128
> Via: 1.0 konqi.openstreetmap.org:3128 (squid/2.7.STABLE7)
> Connection: close
>
>
> It should be more effective than what you're trying to achieve. (I think.)
>
>
>   
Yes but isn't the expiry header of osm one day in advance? Which means 
the tiles have to be fetched from the server once a day
My expiry header are added successfully to the page, and its clear using 
firebug but next time the page is refreshed the tiles are again fetched 
from the server not from the cache, this is something I can't really 
figure out why!!




More information about the dev mailing list