2010-05-02 2 views
9

Dopo aver posto una domanda su sending “304 Not Modified” for images stored in the in the Google App Engine datastore, ora ho una domanda su Cache-Control.È corretto impostare "Cache-Control: public" quando si invia "304 Not Modified" per le immagini memorizzate nel datastore

La mia app ora invia Last-Modified e Etag, ma per impostazione predefinita GAE invia anche Cache-Control: no-cache. Secondo this page:

La direttiva “no-cache”, in base al RFC, dice al browser che si dovrebbe rinnovare con il server prima di servire la pagina dalla cache . [...] In pratica, IE e Firefox hanno iniziato a trattare la direttiva no-cache come se istruisse il browser a non memorizzare nella cache la pagina .

Come voglio browser di memorizzare nella cache l'immagine, ho aggiunto la seguente riga al mio codice:

self.response.headers['Cache-Control'] = "public" 

Secondo la stessa pagina di prima:

Il “ direttiva cache-control: public " [...] indica al browser e ai proxy [...] che la pagina potrebbe essere memorizzata nella cache. È utile per le pagine non sensibili, poiché la memorizzazione nella cache migliora le prestazioni.

La domanda è se questo potrebbe essere dannoso per l'applicazione in qualche modo? Sarebbe meglio mandare Cache-Control: must-revalidate "forzare" il browser al fine di rinnovare (suppongo che sia il comportamento che in origine era il motivo dietro invio Cache-Control: no-cache)

Questa direttiva insiste sul fatto che il browser deve rinnovare la pagina di contro il server prima di servirlo da dalla cache. Si noti che implicitamente consente al browser di memorizzare la pagina nella cache.

risposta

1

Non è necessario impostare Cache-Control: public a meno che il contenuto non sia protetto dall'autenticazione HTTP o SSL.

Provare a impostare Cache-Control: max-age=nn (dove nn è un numero intero di secondi in cui si desidera che la cache consideri la risposta fresca). AppEngine dovrebbe rimuovere la no-cache.

0

Questo non può essere dannoso per la tua applicazione, l'unico rischio descritto in quella pagina equivale a proxy pubblici (come quelli utilizzati dagli ISP) che memorizzano la tua immagine nella cache. Se l'immagine è confidenziale o specifica dell'utente, non vuoi che ciò accada. In tutti gli altri casi, la memorizzazione nella cache è esattamente ciò che desideri.