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.

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?

  • IIS 7 + Tomcat 7 - come raggiungere http: // localhost: 8080 / my_app sotto ad esempio http: //my_app.local
  • Come posso creare un certificato auto-firmato più forte di SHA-1?
  • FTP restringere l'accesso dell'utente a una specifica cartella
  • IIS 7.5 ignorando le impostazioni di HttpCompression in web.config
  • IIS Advanced Logging inoltra a Syslog
  • Può un utilizzo di memory virtuale del process di lavoro di IIS supera il limite della memory privata?
  • Errore IIS 404 in cui esiste il file
  • Configurare IIS 7.5 come conforms a FIPS 140.2
  • 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.