2016-05-23 11 views
0

通常を要求し、私はこのようなHTTP2リクエストを経由してファイルを提供します:更新キャッシュは

if (req.url === '/main.html') { 
    let files = { 
    'main.css': { 
     type: 'text/css' 
    }, 
    'main.js': { 
     type: 'application/javascript' 
    } 
    }; 
    for (let name in files) { 
    let push = res.push('/' + name, { 
     response: { 
     'Content-Type': files[name].type, 
     'Cache-Control': 'public, max-age=31556926' 
     } 
    }); 
    push.on('error', er => console.log(er)); 
    push.end(fs.readFileSync('/home/src/' + name)); 
    } 
    res.writeHead(200, { 
    'Content-Type': 'text/html' 
    }); 
    res.end(` 
    <html> 
    <head> 
     <link rel="stylesheet" href="/main.css"> 
     <script src="/main.js"></script> 
    </head> 
    <body></body> 
    </html> 
`); 
} 

私は彼らの新しいコンテンツが用意されていたときに、これらの2つのファイルmain.cssmain.jsを更新して問題を得ました。 別の/main.htmlリクエストを送信するだけで更新されますか?そうでない場合は、どうすれば更新できますか?

答えて

1

いいえ、更新されません。新しいバージョンのアセットをプッシュしようとすると、ブラウザはアセットがまだ新鮮であるとみなしてストリームをリセットします。そして古いバージョンの資産を使って引き続き使用します。

今のところ少なくとも解決策は、キャッシュダイジェストメカニズムキャッシュ無効化を使用することです。

ここに詳細を読む:

https://www.shimmercat.com/en/info/articles/caching/

this answer参照してください。

+0

ご回答いただきありがとうございます。また、古いキャッシュを削除するために 'max-age'を使って非常に短い寿命を設定することも考えています。この方法を試したことがありますか?それはすべてのブラウザで機能しますか? – Lewis

+0

こんにちは!はい、この方法はInternet Explorer、Chrome、Firefoxでうまく動作します。 SafariはHTTP/2プッシュをサポートしていないので、そこには必要ありません。 – dsign

関連する問題