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