2010-02-02 49 views
4

我在瀏覽器中爲應用程序引擎應用程序緩存圖像時遇到了一些問題 我發送的是上次修改的,到期的和緩存控制標題,但圖像是每次從服務器加載。 下面是代碼的報頭部分:緩存在瀏覽器中的圖像 - 應用程序引擎補丁應用程序

響應[ '的Content-Type'] = '圖像/ JPG'

響應[ '上次修改'] = current_time.strftime('%A,% d%b%Y%H:%M:%S GMT ')

響應[' 過期 '] = CURRENT_TIME + timedelta(天= 30)

響應[' 緩存控制 '] =' 公共,max-age = 2592000'

回答

7

以下是我在dpaste中修復副本的示例代碼here

def view_image(request, key): 
    data = memcache.get(key) 
    if data is not None: 
    if(request.META.get('HTTP_IF_MODIFIED_SINCE') >= data['Last-Modified']): 
     data.status_code = 304 
    return data 
    else: 
    image_content_blob = #some code to get the image from the data store 
    current_time = datetime.utcnow() 
    response = HttpResponse() 
    last_modified = current_time - timedelta(days=1) 
    response['Content-Type'] = 'image/jpg' 
    response['Last-Modified'] = last_modified.strftime('%a, %d %b %Y %H:%M:%S GMT') 
    response['Expires'] = current_time + timedelta(days=30) 
    response['Cache-Control'] = 'public, max-age=315360000' 
    response['Date']   = current_time 
    response.content = image_content_blob 

    memcache.add(image_key, response, 86400) 
    return response 
+1

首先要記住的是,如果你像我這樣的Django並且有一個自定義中間件,那麼每次請求映像時都會執行中間件。這可以(並會)提高你的開銷。 而在上面的例子中,我將內容類型硬編碼爲'image/jpg',這會導致在Safari和IE中僅顯示圖像(在HTML頁面中正常工作)時出現問題。 – 2010-04-22 06:48:09

+0

'日期'標頭不適用於AppEngine上的回覆http://code.google.com/appengine/docs/python/tools/webapp/responseclass.html#Disallowed_HTTP_Response_Headers – 2012-02-02 14:01:47

相關問題