Arrestare IIS 7.5 da submit cache-controllo Max-Age sui codici di errore

Ho qualche contenuto statico con l'intestazione Max-Age controllo della cache che gli sono collegati in modo che i client memorizzino in cache il contenuto statico. Tuttavia, IIS 7.5 invia ancora questa header quando ci sono risposte di errore che consigliano al client di cache.

L'effetto ha l'effetto negativo che alcune proxy cache la risposta di errore. Potrei Vary: Accept,Accept-Encoding ma questo non affronta veramente il problema radicale di Max-Age che va sulle risposte di errore.

  • IIS 7.5 Missing Authorization Header
  • Numero di visitatori attivi sul sito web rispetto al numero di connessioni simultanee al server web in un punto del tempo
  • Cosa diavolo è un metodo OPZIONI in un registro web di IIS 7.5?
  • Nessuna intestazione di controllo di cache per i file di AWS CloudFront con S3 Origin
  • Tempo reale e analisi storica della width di banda su una window con windows IIS 6/7
  • Accelerare il server di sviluppo asp.net
  • La sezione corrente IIS web.config è:

     <configuration> <system.webServer> <staticContent> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> </staticContent> </system.webServer> </configuration> 

    C'è un modo per poterlo fare in modo da non dire ai client o ai proxy di cache dei codici di errore 400/500?

    2 Solutions collect form web for “Arrestare IIS 7.5 da submit cache-controllo Max-Age sui codici di errore”

    Ho creato una "suite" rudimentale di prova.

    Quando eseguo i test con un Web.config minimo su IIS 7.0 (modalità integrata pipeline su .NET 4.0) tutto passa; l'intestazione di risposta di Cache-Control del file di prova è impostata su private quando l'intestazione di Accept di richiesta non corrisponde al tipo di Content-Type del file.

    Questo mi port a credere di avere qualche module che interrompe la routine di cache statico di IIS o IIS 7.0 e 7.5.

    Ecco i file che ho usato (sans some-script.js dal suo solo un file vuoto):

    Web.Config:

     <?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0"> </compilation> </system.web> <system.webServer> <staticContent> <!-- Set expire headers to 30 days for static content--> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> </staticContent> </system.webServer> </configuration> 

    test.html:

     <!doctype html> <html> <head> <title>http://serverfault.com/questions/346975</title> <style> body > div { border:1px solid; padding:10px; margin:10px; } </style> </head> <body> <div> <h2>Request JS file with Accepts: accept/nothing</h2> <b>Response Headers: </b> <pre id="responseHeaders-1">loading&hellip</pre> </div> <div> <h2>Request JS file with Accepts: */*</h2> <b>Response Headers: </b> <pre id="responseHeaders-2">loading&hellip</pre> </div> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> var responseHeaders1 = $("#responseHeaders-1"), responseHeaders2 = $("#responseHeaders-2"), fetchScript = function (accepts, element, successMsg, errorMsg) { var jXhr = $.ajax({ // fetch the resource "fresh" each time since we are testing the Cache-Control header and not caching itself "url": "some-script.js?" + (new Date).getTime(), "headers": { "Accept" : accepts }, "complete": function () { var headers = jXhr.getAllResponseHeaders(); headers = headers.replace(/(Cache-Control:.+)/i, "<strong><u>$1</u></strong>"); element.html(headers); }, "success": function () { element.after("<div>" + successMsg + "</div>"); }, "error": function () { element.after("<div>" + errorMsg + "</div>"); } }); }; fetchScript("accept/nothing", responseHeaders1, "Uh, your server is sending stuff when the client doesn't accept it.", "Your server (probably) responded correctly."); fetchScript("*/*", responseHeaders2, "Your server responded correctly.", "Something went wrong."); </script> </body> </html> 

    è necessario specificare quale tipo di contenuto si desidera memorizzare nella cache. per esempio si potrebbe cache script, css, image .. etc. quindi utilizza <location path ="Scripts"> tag prima del tag <system.webServer> . così il tuo config web sembra questo.

      <location path ="Scripts"> <system.webServer> <staticContent> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="07:00:00" /> </staticContent> </system.webServer> </location> <location path ="css"> <system.webServer> <staticContent> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="07:00:00" /> </staticContent> </system.webServer> </location> 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.