部署靜態(tài)內(nèi)容到一個(gè)基于云的存儲(chǔ)服務(wù),可以直接向客戶提供這些。這個(gè)模式可以減少潛在的昂貴的計(jì)算實(shí)例的需求。
Web應(yīng)用程序通常包括靜態(tài)內(nèi)容的一些元素。此靜態(tài)內(nèi)容可以包括HTML頁(yè)面和諸如圖像和可用到客戶端的文件的其他資源,無(wú)論是作為一個(gè) HTML 頁(yè)的一部分(如嵌入式圖像,樣式表和客戶端 JavaScript 文件)或作為單獨(dú)的下載(如PDF文檔)。
盡管Web服務(wù)器以及調(diào)整通過有效的動(dòng)態(tài)執(zhí)行頁(yè)代碼和輸出緩存優(yōu)化的要求,他們?nèi)匀槐仨毺幚碚?qǐng)求下載靜態(tài)內(nèi)容。這種吸收,可以經(jīng)常得到更好的利用處理周期。
在大多數(shù)云托管環(huán)境中,它可以最小化用于計(jì)算實(shí)例的要求(例如,使用較小的實(shí)例或更少的情況下),通過定位部分的應(yīng)用程序的資源和靜態(tài)網(wǎng)頁(yè)中的存儲(chǔ)服務(wù)。費(fèi)用為云托管的存儲(chǔ)通常比計(jì)算實(shí)例少得多。
何時(shí)主機(jī)在一個(gè)存儲(chǔ)服務(wù)的應(yīng)用的某些部分,主要考慮的是與應(yīng)用程序的部署以及確保其不旨在提供給匿名用戶的資源。
在決定如何實(shí)現(xiàn)這個(gè)模式時(shí),請(qǐng)考慮以下幾點(diǎn):
這種模式非常適合于:
這種模式可能不適合于下列情況:
注意:它有時(shí)是可以存儲(chǔ)一個(gè)完整的網(wǎng)站只包含靜態(tài)內(nèi)容,如 HTML 頁(yè)面,圖片,樣式表,客戶端 JavaScript 文件,下載的文件,如在云中托管的存儲(chǔ) PDF 文件。欲了解更多信息,請(qǐng)參閱在 Infosys 的博客部署靜態(tài)網(wǎng)站在微軟 Azure 的有效途徑。
位于 Azure 的 Blob 存儲(chǔ)靜態(tài)內(nèi)容,可直接通過 Web 瀏覽器進(jìn)行訪問。 Azure 提供一個(gè)基于 HTTP 的接口上的存儲(chǔ),可以公開暴露給客戶。例如,在一個(gè)天青 Blob 存儲(chǔ)容器內(nèi)容使用形式的 URL 被公開:
HTTP:// [存儲(chǔ)帳戶名稱].blob.core.windows.net/[容器名稱]/[文件名]
何時(shí)上載該應(yīng)用程序的內(nèi)容,必須創(chuàng)建一個(gè)或多個(gè)斑點(diǎn)的容器來保存文件和文檔。請(qǐng)注意,對(duì)于一個(gè)新的容器的默認(rèn)權(quán)限是私有的,你必須改變這種公共允許客戶端訪問的內(nèi)容。如果有必要,以防止匿名訪問的內(nèi)容,您可以實(shí)現(xiàn)代客主要模式,因此用戶必須按順序下載資源出示有效的令牌。
注意:在 Azure 網(wǎng)站上的頁(yè)面 Blob 服務(wù)的概念包含了 Blob 存儲(chǔ)信息,并且您可以訪問它,并用它的方式。
在每個(gè)頁(yè)面中的鏈接將指定的資源的 URL,客戶端將直接從存儲(chǔ)服務(wù)訪問該資源。圖1示出了這種方法。
圖1 - 從存儲(chǔ)服務(wù)交付的應(yīng)用程序的靜態(tài)部分,直接
在傳送到客戶端的頁(yè)面的鏈接必須指定的 blob 容器和資源的完整 URL。例如,包含在一個(gè)公共容器的鏈接的圖像的頁(yè)面可能包含以下內(nèi)容。
<img src="https://atts.w3cschool.cn/attachments/image/cimg/image1.png"
alt="My image" />
注意:
如果該資源是通過使用代客密鑰進(jìn)行保護(hù),如天青共享訪問簽名(SAS),該簽名必須被包含在鏈接的 URL。
適用于本指南中的示例包含一個(gè)名為 StaticContentHosting,演示了使用外部存儲(chǔ)靜態(tài)資源的解決方案。該 StaticContentHosting.Cloud 項(xiàng)目包含指定保存靜態(tài)內(nèi)容的存儲(chǔ)帳戶和容器的配置文件。
<Setting name="StaticContent.StorageConnectionString"
value="UseDevelopmentStorage=true" />
<Setting name="StaticContent.Container" value="static-content" />
在 StaticContentHosting.Web 項(xiàng)目的文件 Settings.cs Settings(設(shè)置)類包含的方法來提取這些值,并建立一個(gè)字符串值,包含云存儲(chǔ)帳戶的容器的 URL。
public class Settings
{
public static string StaticContentStorageConnectionString {
get
{
return RoleEnvironment.GetConfigurationSettingValue(
"StaticContent.StorageConnectionString");
}
}
?
public static string StaticContentContainer
{
get
{
return RoleEnvironment.GetConfigurationSettingValue("StaticContent.Container");
}
}
?
public static string StaticContentBaseUrl
{
get
{
var account = CloudStorageAccount.Parse(StaticContentStorageConnectionString);
?
return string.Format("{0}/{1}", account.BlobEndpoint.ToString().TrimEnd('/'),
StaticContentContainer.TrimStart('/'));
}
}
}
在文件 StaticContentUrlHtmlHelper.cs 的 StaticContentUrlHtmlHelper 類公開命名 StaticContentUrl,如果傳遞給它的URL與ASP.NET根路徑字符(?)開始生成包含路徑的云存儲(chǔ)帳戶的 URL 的方法。
public static class StaticContentUrlHtmlHelper
{
public static string StaticContentUrl(this HtmlHelper helper, string contentPath)
{
if (contentPath.StartsWith("~"))
{
contentPath = contentPath.Substring(1);
}
?
contentPath = string.Format("{0}/{1}", Settings.StaticContentBaseUrl.TrimEnd('/'),
contentPath.TrimStart('/'));
?
var url = new UrlHelper(helper.ViewContext.RequestContext);
?
return url.Content(contentPath);
}
}
在瀏覽文件 Index.cshtml\ Home 文件夾包含使用 StaticContentUrl 方法創(chuàng)建的 URL,它的 src 屬性的圖像元素。
<img src="https://atts.w3cschool.cn/attachments/image/cimg/orderedList1.png")" alt="Test Image" />
更多建議: