Model hostování statického obsahu
Nasazuje statický obsah do služby cloudového úložiště, která ho může doručit přímo klientovi. Může se tak snížit potřeba potenciálně drahých výpočetních instancí.
Kontext a problém
Webové aplikace obvykle obsahují některé prvky statického obsahu. Tento statický obsah by mohl zahrnovat stránky HTML a další prostředky, například image a dokumenty, které má k dispozici klient jako součást stránky HTML (například vložené obrázky, šablony stylů a soubory JavaScript na straně klienta) nebo jako samostatné soubory ke stažení (jako jsou například dokumenty PDF).
I když jsou webové servery optimalizované pro dynamické vykreslování a ukládání výstupu do mezipaměti, musí stále zpracovávat žádosti o stažení statického obsahu. Takto se spotřebovávají cykly zpracování, které by často bylo možné využít lepším způsobem.
Řešení
Ve většině prostředí hostování v cloudu můžete do služby úložiště umístit některé prostředky a statické stránky aplikace. Služba úložiště může obsluhovat požadavky na tyto prostředky a snížit zatížení výpočetních prostředků, které zpracovávají jiné webové požadavky. Náklady na úložiště hostované v cloudu jsou obvykle mnohem menší, než je tomu u výpočetních instancí.
Při hostování některých částí aplikace v úložišti služby je nutné zvážit hlavně nasazení aplikace a zabezpečení prostředků, které nemají být dostupné anonymním uživatelům.
Problémy a důležité informace
Když se budete rozhodovat, jak tento model implementovat, měli byste vzít v úvahu následující skutečnosti:
Hostovaná služba úložiště musí vystavit koncový bod protokolu HTTP, ke kterému můžou získat uživatelé přístup, aby si mohli stáhnout statické prostředky. Některé služby úložiště také podporují protokol HTTPS, takže je možné hostovat prostředky ve službách úložiště, které vyžadují protokol SSL.
Aby bylo možné dosáhnout maximálního výkonu a dostupnosti, zvažte možnost použít síť CDN k ukládání obsahu mezipaměti do kontejneru úložiště v několika datových centrech po celém světě. Za použití sítě CDN pravděpodobně bude nutné platit.
Účty úložiště se často ve výchozím nastavení georeplikují, aby se zajistila odolnost vůči událostem, které můžou ovlivnit datové centrum. To znamená, že se může změnit IP adresa, ale adresa URL zůstane stejná.
Když je nějaký obsah umístěný v účtu úložiště a další obsah se nachází v hostované výpočetní instanci, může to být náročnější na nasazení a aktualizaci aplikace. Možná bude nutné provést samostatná nasazení a vytvořit verze aplikace a obsahu, aby byla možná jednodušší správa, zejména pokud obsahuje statický obsah soubory skriptu nebo komponenty uživatelského rozhraní. Pokud je ale potřeba aktualizovat jenom statické prostředky, je možné je jednoduše odeslat na účet úložiště, aniž by bylo potřeba znovu nasazovat balíček aplikace.
Služby úložiště nemusí podporovat používání vlastních názvů domén. V takovém případě je potřeba zadat v odkazech úplnou adresu URL prostředků, protože budou v jiné doméně než dynamicky generovaný obsah, který obsahuje odkazy.
Kontejnery úložiště musí být nakonfigurované pro veřejný přístup pro čtení, ale je důležité zajistit, aby neměly nakonfigurovaný veřejný přístup k zápisu, aby uživatelé nemohli nahrát obsah.
Zvažte použití klíče nebo tokenu osobního k řízení přístupu k prostředkům, které by neměly být k dispozici anonymně. Další informace najdete v tématu vzor klíče osobního .
Kdy se má tento model použít
Tento model je vhodný pro:
Minimalizace nákladů na hostování pro weby a aplikace, které obsahují některé statické prostředky.
Minimalizace nákladů na hostování pro weby, které obsahují jenom statický obsah a prostředky. V závislosti na možnostech systému úložiště poskytovatele hostingu může být možné plně hostovat plně statický web v účtu úložiště.
Vystavení statických prostředků a obsahu pro aplikace běžící v jiných hostingových prostředích nebo na místních serverech.
Vyhledání obsahu ve více zeměpisných oblastech pomocí sítě pro doručování obsahu, která ukládá obsah účtu úložiště do mezipaměti v několika datových centrech po celém světě.
Sledování nákladů a využití šířky pásma. Použití účtu samostatného úložiště pro veškerý statický obsah nebo jeho část umožňuje jednodušeji oddělit náklady od nákladů na hosting a runtime.
Tento model nemusí být vhodný v následujících situacích:
Aplikace potřebuje před doručením do klienta nějakým způsobem zpracovat statický obsah. Může být například potřeba přidat k dokumentu časové razítko.
Objem statického obsahu je velmi malý. Nevýhody, které přinese režie načítání tohoto obsahu z různých úložišť, můžou převážit nad výhodami oddělení obsahu od výpočetního prostředku.
Příklad
Azure Storage podporuje obsluhu statického obsahu přímo z kontejneru úložiště. Soubory jsou obsluhovány prostřednictvím požadavků anonymního přístupu. Ve výchozím nastavení mají soubory adresu URL v subdoméně core.windows.net , například https://contoso.z4.web.core.windows.net/image.png . můžete nakonfigurovat vlastní název domény a použít Azure CDN k přístupu k souborům přes HTTPS. Další informace najdete v tématu statické hostování webů v Azure Storage.

Hostování statických webů zpřístupňuje soubory pro anonymní přístup. Pokud potřebujete řídit, kdo má přístup k souborům, můžete ukládat soubory v úložišti objektů BLOB v Azure a pak generovat sdílené přístupové podpisy pro omezení přístupu.
Odkazy na stránkách doručených klientovi musí určovat úplnou adresu URL prostředku. Pokud je prostředek chráněný pomocí osobního klíče, jako je například sdílený přístupový podpis, musí být tento podpis zahrnut v adrese URL.
V GitHubje k dispozici ukázková aplikace, která demonstruje použití externího úložiště pro statické prostředky. Tato ukázka používá konfigurační soubory k určení účtu úložiště a kontejneru, který obsahuje statický obsah.
<Setting name="StaticContent.StorageConnectionString"
value="UseDevelopmentStorage=true" />
<Setting name="StaticContent.Container" value="static-content" />
Třída Settings v souboru Settings.cs v projektu StaticContentHosting.Web obsahuje metody pro extrakci těchto hodnot a vytvoření řetězcové hodnoty obsahující adresu URL kontejneru účtu úložiště v cloudu.
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 blobServiceClient = new BlobServiceClient(StaticContentStorageConnectionString);
return string.Format("{0}/{1}", blobServiceClient.Uri.ToString().TrimEnd('/'), StaticContentContainer.TrimStart('/'));
}
}
}
Třída StaticContentUrlHtmlHelper v souboru StaticContentUrlHtmlHelper.cs zpřístupní metodu s názvem StaticContentUrl, která generuje adresy URL obsahující cestu k účtu úložiště v cloudu, pokud předaná adresa URL začíná znakem kořenové cesty ASP.NET (~).
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);
}
}
Soubor Index.cshtm ve složce Views\Home obsahuje element image, který používá metodu StaticContentUrl k vytvoření adresy URL pro svůj atribut src.
<img src="@Html.StaticContentUrl("~/media/orderedList1.png")" alt="Test Image" />
Další kroky
- Ukázka hostování statického obsahu. Ukázková aplikace, která demonstruje tento model.
- Osobního klíčového vzoru. Pokud cílové prostředky nemají být dostupné anonymním uživatelům, použijte tento model k omezení přímého přístupu.
- Webová aplikace bez serveru v Azure. Referenční architektura, která používá hostování statického webu s Azure Functions k implementaci webové aplikace bez serveru.