所以,我不希望我的静态 vue.js 应用程序上的 index.html 因为更新而总是被缓存。我可以在存储资源管理器中手动设置 max-age。我为此站点设置了 Azure CDN,每次部署后都会清除它,但我认为这不会总是更新当前用户,因为 index.html 上的 max-age 未设置。有没有办法从 CDN 设置最大年龄?或者是否有一个我应该在 devops deploy 上使用的 azure cli 命令来设置存储中 index.html 文件的 max-age。我没有看到太多关于这方面的文档,也许 CDN 只负责处理所有事情?
问问题
712 次
1 回答
1
确保为 CDN 的“服务器端缓存”和浏览器的“本地缓存”设置正确的值。您需要在 blob 上设置 Max-Age 以使其始终在 CDN 中处于最新状态,同时使用Cache-Control
Blob 上的标头以使浏览器始终读取当前版本。这在 CDN 中也称为“内部最大年龄”与“外部最大年龄”(缓存控制),尽管命名因提供商而异。
另请参阅我最近对此的回答: 如何停止 index.html 被 Azure CDN 缓存
Cache-Control
对我来说,我发现在 blob 存储中设置标头通常就足够了index.html
,以便同时控制服务器端和本地缓存。至少 Azure CDN 提供程序在服务器端也尊重这一点,因此您只需付出最少的努力。
如果要将其添加到管道,另请参阅此代码示例: https ://schwabencode.com/blog/2019/05/03/Update-Azure-Storage-Blob-Properties-with-PowerShell
# Storage Settings
$storageAccount = "__storage account__";
$containerName = "__container name__";
# Blob Update Settings
$contentCacheControl = "public, max-age=2592000"; # 30 days
$extensions = @(".gif", ".jpg", ".jpeg", ".ico", ".png", ".css", ".js");
# Read all blobs
$blobs = az storage blob list --account-name $storageAccount --container-name $containerName --num-results * --output json | ConvertFrom-Json
# iterate all blobs
foreach($blob in $blobs)
{
# use name as identifier
$blobName = $blob.name;
# get extension
$extension = [System.IO.Path]::GetExtension($blobName).ToLower();
# update blob if extension is affected
if($extensions.Contains($extension))
{
az storage blob update --account-name $storageAccount --container-name $containerName --name $blobName --content-cache-control $contentCacheControl
Write-Host "Updated $blobName"
}
}
于 2020-06-28T20:37:15.650 回答