1

我已经设置了谷歌地图的覆盖(V 3.10)的JavaScript来显示服务器上生成的图像:谷歌地图地面覆盖层不缓存Django的服务动态图像

var overlay = new google.maps.GroundOverlay(url, MAP_BOUNDS, {map: gmap}); 

当URL指向一个静态网址,覆盖工作正常。但是,当它指向一个Django(v 1.4)动态url时,该图像显示正确,但在地图滚动时它不断向服务器发送对url的请求例如:

url = 'localhost:8000/abcdef/maps/getMap' 

在Django的urls.py:

url(r'^(?P<key>\S+)/maps/getMap/$', 'maps.views.getMap'), 

网址重定向到这个代码:

@csrf_exempt 
def getMap(request, key): 

    response = HttpResponse(mimetype="image/png") 

    im=Image.open('media/maps' + id + '/map.png') 
    im.save(response, 'PNG') 

    return response 

所以,在我看来,存在的方式有些差异谷歌地图/浏览器正在为缓存目的处理图片,可能与HTTP头部中的某些内容有关。我该如何做到这一点,所以一旦图像被检索,它不会一直发出服务器请求?

通过检查浏览器控制台中的响应标题,看起来静态图像具有动态图像没有的“Content-Length”和“Last-Modified”字段。不确定这是否相关。

感谢您的帮助。

回答

1

原来的溶液是相对简单:

response = HttpResponse(image_data, mimetype="image/png") 
response['Cache-Control'] = 'max-age=86400' 
return response