我用javascript设置了一个谷歌地图覆盖(v3.10),以显示服务器上生成的图像:
var overlay = new google.maps.GroundOverlay(url, MAP_BOUNDS, {map: gmap});
当url指向静态url时,覆盖效果良好。然而,当它指向Django(v1.4)动态url时,图像会正确显示,但在滚动地图时,它会不断向url发出服务器请求例如:
url = 'localhost:8000/abcdef/maps/getMap'
在Django urls.py:
url(r'^(?P<key>S+)/maps/getMap/$', 'maps.views.getMap'),
url重定向到此代码:
@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标头中的某些内容有关。我如何才能使它在检索到图像后不会不断发出服务器请求?
通过检查浏览器控制台中的响应标头,静态图像似乎有"内容长度"one_answers"上次修改"字段,而动态图像没有。不确定这是否相关。
感谢您的帮助。
发现解决方案相对简单:
response = HttpResponse(image_data, mimetype="image/png")
response['Cache-Control'] = 'max-age=86400'
return response