2010-03-05 4 views
6

Sto servendo alcuni file tramite un HTTPModule in asp.net. Voglio sapere se ci sono dei vantaggi nell'impostare o non impostare l'intestazione di Cache-Control su qualcosa (come no-cache)?Devo impostare l'intestazione Cache-Control quando serve i file? O no?

Modifica: Il motivo per cui sono curioso di ciò è dovuto al fatto che abbiamo riscontrato un problema in cui la pubblicazione di documenti di Office su una sessione SSL in IE genera un errore (con Cache Control impostato su no-cache). Vale a dire, non è possibile scaricare i documenti dell'ufficio su SSL in IE se si è impostato Cache-Control su no-cache.

Fondamentalmente NON voglio includere l'intestazione Cache-Control, ma mi chiedo se causerà problemi?

Modifica 2: Bene, l'intestazione Cache-Control è fuori. Ho provato i suggerimenti qui sotto, ma ho avuto alcuni problemi. Ogni volta che aggiungo un'intestazione di scadenza, o cambio Cache-Control, quando provo ad aprire un documento di Office 2007, tenta di aprirlo come zip. (So ​​che sono davvero file zip sotto le copertine) ma quando non uso un'intestazione di scadenza o controllo cache IE li apre bene come documenti di Office. Sfortunatamente non ho tempo per cercare di capire tutto questo - dal momento che il congelamento del codice dura dieci minuti :)

Grazie a tutti per aver cercato di aiutare!

risposta

2

Secondo Yahoo! e YSlow dovresti. Vedi questo article.

Aggiornamento: in base al tuo commento sembra che tu stia cercando di impedire il caching. Vorrei usare:

Cache-Control: max-age=0 

Per me, è più semplice e più esplicativo rispetto all'utilizzo di un'intestazione Expires.

Aggiornamento 2: Sembra che sia necessario specificare l'intestazione Content-Type per i documenti dell'ufficio. Provare a utilizzare di seguito:

Content-Type: application/octet-stream 
+0

Suppongo che no-cache sia ciò a cui pensano debba essere impostato? Il problema con no-cache è che se stai eseguendo una sessione SSL, non puoi scaricare documenti Office in IE. Voglio rimuovere l'intestazione di controllo della cache senza cache, ma sono preoccupato di ottenere documenti obsoleti. – Eric

+0

Ho aggiornato la mia risposta per voi. –

+0

Questa domanda SO potrebbe essere interessante: http://stackoverflow.com/questions/1046966/whats-the-difference-between-cache-control-max-age0-and-no-cache –

1

Invece di utilizzare Cache-Control si potrebbe provare a impostare l'intestazione Expires ad un passato di data/ora.

+0

La maggior parte dei browser e dei proxy moderni onorano l'intestazione di scadenza? È passato troppo tempo da quando ho effettivamente saputo quali parti di HTTP 1.1 sono pienamente supportate e quali sono ancora incerte. – Eric

+0

In termini di proxy HTTP, so che Squid può gestire Cache-Control e Expires. –

+0

Vedere la mia modifica sopra - Ho provato l'header expires ma IE 8 stava aprendo i documenti dell'ufficio come file zip. Senza l'intestazione di scadenza, IE è in grado di aprire i documenti dell'ufficio in Office. Strano lo so ... ma non ho il tempo di capirlo :(Grazie per il suggerimento però! – Eric

1

Questo è sicuramente un problema strano ... ma qui è una soluzione rapida che potrebbe impedire agli utenti di ottenere il contenuto stantio:

Se si aggiunge un parametro querystring aggiuntivo alla fine dell'URL per rendere ogni richiesta di il file Office è unico, puoi andare via senza impostare le informazioni di controllo della cache nell'intestazione.

l'URL corrente può apparire come segue:

http://mysite.com/filegetter?name=document.doc

Con l'ulteriore parametro "unico":

http://mysite.com/filegetter?name=document.doc&ts=

Ciò impedirà il browser da dare agli utenti un ufficio stantio file e il metodo potrebbe essere implementato nel codice client o server. Il modulo che gestisce la spedizione del file ai tuoi utenti semplicemente ignora la porzione di URL che lo rende unico al browser dell'utente.

+0

Questo è vero e dovrebbe funzionare, ma è un po 'hacker.Credo Cache-Control: max-age = 0 dovrebbe fare la stessa cosa –

+0

Senza dubbio, è "soluzione" ... ma sarà Penso che questo sia il metodo utilizzato da YUI per garantire che le richieste AJAX non vengano memorizzate dal browser. – smencer

+0

Mi piace molto questo metodo di conservazione dei file. Funziona perfettamente con file css e file js. fare richieste al gestore WebResource.axd. Purtroppo questa non è un'opzione per me, dato che ci sono troppi link là fuori senza questo parm stringa di query, e ho solo una questione di minuti per fare la correzione :( – Eric

0
+0

Grazie f o la grande idea nel post a cui ti sei collegato. Ero fiducioso! Ho provato e i documenti dell'ufficio si aprono bene. Sfortunatamente, IE 8 sta ancora memorizzando nella cache le immagini che vengono pubblicate tramite lo stesso HTTPModule. Vale a dire, non sono sicuro che stia facendo davvero qualcosa per prevenire documenti obsoleti. (docx, pdf etc non sono mai stati davvero un problema in termini di memorizzazione nella cache, ma le immagini pubblicate tramite questo stesso modulo sono :(Probabilmente dovrò gestire le immagini come caso separato.) – Eric