Stackoverflow.com のソースを見ると、css ファイルへの参照が次のようになっていることがわかります。
<link href="/Content/all.min.css?v=2383" rel="stylesheet" type="text/css" />
クエリ文字列を介してバージョンを渡し、正しい CSS ファイルを提供できるようにするにはどうすればよいでしょうか?
Stackoverflow.com のソースを見ると、css ファイルへの参照が次のようになっていることがわかります。
<link href="/Content/all.min.css?v=2383" rel="stylesheet" type="text/css" />
クエリ文字列を介してバージョンを渡し、正しい CSS ファイルを提供できるようにするにはどうすればよいでしょうか?
この記事 (PHP/.htaccess の例)では、その背後にある考え方について説明しています。基本的に、ファイルを最後に変更したときのタイムスタンプをファイル名に追加しても、元のファイルを提供できます。この方法では、CSS ファイルの新しいバージョンを保存するたびに、ファイル名が変更され、ブラウザーに新しいバージョンを強制的にダウンロードさせます。これは、CSS ファイルと JS ファイルの両方を含む、多くの種類のファイルで機能します。(ファイル名を使用する代わりに、クエリ文字列を使用することもできます。)
ASP.NET のサンプルは次のとおりです。
public static string GetBreaker(string fileName)
{
string cacheBreaker = null;
try
{
if (fileName.StartsWith("~"))
{
fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName.Remove(0));
}
cacheBreaker = File.GetLastWriteTime(fileName).ToFileTime().ToString();
}
catch { }
return string.IsNullOrEmpty(cacheBreaker) ? string.Empty : string.Format("?cachebreaker={0}", cacheBreaker);
}
そして、MasterPage でこのメソッドを次のように呼び出します。
<link href="<%= this.ResolveClientUrl("~/CSS/style.css") %><%=CacheBreaker.GetBreaker("~/CSS/style.css") %>"
rel="stylesheet" type="text/css" />
そのため、ブラウザは css ファイルをキャッシュしません。css ファイルは各バージョンで変更される可能性があるため、バージョン番号を使用すると便利です。
正しいcssファイルを呼び出す方法ではありません。ファイルは常に同じですが、バージョン番号により、ブラウザは別のことを考え、再度取得します。
それがどのように行われるかを知りたい場合は、以前のブログ エントリで簡単に言及しました。ビルド プロセスによって自動的に行われます。このブログ投稿(3 番目の箇条書き) を参照してください。
残念ながら詳細はありませんが、そのブログ投稿にコメントするか、stackoverflow チームに連絡することで、より多くの情報を入手できるかもしれません。