2016-02-26 28 views
6

Aşağıdaki HTML'yi bir tarayıcıda alırken, tarayıcı tarafından ana kapsamda yapılan XHTTP isteklerinin önbellek denetimi başlığı ayarlanır, ancak zaman aşımı geri çağrısından yapılan istekte bulunmaz. Bu, önbellek olmadıkça ikinci kaynağın her zaman önbellekten yüklenmesine neden olur. Geri aramada isteği neden önbellek başlıklarını böyle etkiler? Bir XMLHttpRequest ürününün geri aramadan yapılması önbelleğe almayı nasıl etkiler?

<!DOCTYPE HTML> 
<html> 
    <body> 
    <script type="text/javascript"> 

     var get = function (url) { 
     var xhttp = new XMLHttpRequest(); 
     xhttp.open("GET", url, true); 
     xhttp.send(); 
     } 

     get("resource1.html"); // Cache-control set 

     setTimeout(function() { 
     get("resource2.html"); // Cache-control not set 
     }, 10); 

     get("resource3.html"); // Cache-control set 

    </script> 
    </body> 
</html> 

(Bütün makineler ve tarayıcılar ben el altında olması ve sonuçlar oldukça tutarlıdır bu test ettik. Bunun tek istisnası Firefox ise geri arama kaynak için bir -denetimi başlığı ayarlamak gibi görünüyor olmasıdır zaman aşımı, diğer tarayıcıların hala yapmadığı 0 olarak ayarlanmıştır.

cevap

-1

şimdilik çoğaltmak, ama en içinde ... Ben ile test

evde çalışalım edilemez:

router.get(/resource./, function(req, res) { 
    res.setHeader('Cache-Control', 'public, max-age=90'); 
    res.send('<hr/>'); 
}); 
router.get('/', function(req, res) { 
    res.render('index'); 
}); 

index.html

app.js
<!DOCTYPE HTML> 
<html> 
<body> 
<script type="text/javascript"> 

    var get = function (url) { 
     var xhttp = new XMLHttpRequest(); 
     xhttp.open("GET", url, true); 
     xhttp.send(); 
    } 

    get("resource1.html"); // Cache-control set 

    setTimeout(function() { 
     get("resource2.html"); // Cache-control not set 
    }, 10); 

    get("resource3.html"); // Cache-control set 

</script> 
</body> 
</html> 

200 ...

enter image description here

Ve cache-control Ayrıca

HTTP/1.1 200 OK 
X-Powered-By: Express 
Cache-Control: public, max-age=90 
Content-Type: text/html; charset=utf-8 
Content-Length: 5 
ETag: W/"5-mkFFtL4+3G6hWYdNAMJUPw" 
Date: Thu, 03 Mar 2016 16:09:48 GMT 
Connection: keep-alive 

, günlüğü:

1 sefer

Listening on port 3000 
GET/200 12.544 ms - 499 
/resource1.html undefined 
GET /resource1.html 200 1.389 ms - 5 
/resource3.html undefined 
GET /resource3.html 200 0.353 ms - 5 
/resource2.html undefined 
GET /resource2.html 200 0.233 ms - 5 

2. kez

GET/200 1.627 ms - 499 
/resource1.html no-cache 
GET /resource1.html 200 0.427 ms - 5 
/resource3.html no-cache 
GET /resource3.html 200 0.160 ms - 5 
/resource2.html no-cache 
GET /resource2.html 200 0.408 ms - 5 
+1

Tarayıcının yanıtında değil, tarayıcının isteğinde ayarlanan "önbellek denetimi" başlıklarını soruyorum. Eğer 'console.log (req.path, req.headers [" önbellek kontrolü "]);' 'yi'/resource./'Işleyicinize eklerseniz, tarayıcı önbelleğini temizler ve yeniden yüklerseniz, ' resource2.html '' önbellek-denetimi' başlığına sahip değil. –

+0

Soru muğlaksa özür dilerim. Netleştirmek için metni düzenledim. –

+0

@IanMackinnon [güncellendi] hangi tarayıcı kullanıyorsunuz? Gizli modda denediniz mi? – malix