Když se poprvé začnete učit, jak se názvy domén, IP adresy, webové servery a webové stránky vzájemně doplňují a fungují, může to být občas trochu matoucí nebo ohromující. Jak je to všechno nastaveno, aby to fungovalo tak hladce? Dnešní příspěvek SuperUser Q&A má odpovědi na otázky zvědavého čtenáře.

Dnešní relace otázek a odpovědí k nám přichází s laskavým svolením pododdělení SuperUser Stack Exchange, komunitou řízeného seskupení webových stránek pro otázky a odpovědi.

Foto s laskavým svolením Rosmarie Voegtli (Flickr).

Otázka

Uživatel SuperUser reader user3407319 chce vědět, zda webové servery drží pouze jednu webovou stránku:

Na základě toho, co chápu o DNS a propojení názvu domény s IP adresou webového serveru, na kterém je web uložen, znamená to, že každý webový server může obsahovat pouze jednu webovou stránku? Pokud webové servery obsahují více než jednu webovou stránku, jak se to pak vše vyřeší, abych měl přístup k požadované webové stránce bez jakýchkoli problémů nebo záměn?

Mají webové servery každý pouze jednu webovou stránku, nebo jich drží více?

Odpověď

Přispěvatel SuperUser Bob má pro nás odpověď:

Prohlížeč v zásadě zahrnuje název domény v požadavku HTTP, takže webový server ví, která doména byla požadována, a může podle toho reagovat.

Požadavky HTTP

Zde je návod, jak probíhá váš typický požadavek HTTP:

1. Uživatel poskytne URL ve tvaru http://hostitel:port/cesta.

2. Prohlížeč extrahuje hostitelskou (doménu) část adresy URL a přeloží ji na adresu IP (je-li to nutné) v procesu známém jako překlad názvů. K tomuto překladu může dojít přes DNS, ale nemusí (např. soubor local hosts na běžných operačních systémech DNS obchází).

3. Prohlížeč otevře připojení TCP na zadaný port nebo výchozí port 80 na této IP adrese.

4. Prohlížeč odešle požadavek HTTP. Pro HTTP/1.1 to vypadá takto:

Záhlaví hostitele je standardní a v HTTP/1.1 je vyžadováno. Nebylo specifikováno ve specifikaci HTTP/1.0, ale některé servery to přesto podporují.

Odtud má webový server několik informací, které může použít k rozhodnutí, jaká by měla být odpověď. Všimněte si, že je možné, aby byl jeden webový server vázán na více IP adres.

  • Požadovaná IP adresa ze soketu TCP (IP adresa klienta je také k dispozici, ale používá se zřídka a někdy pro blokování/filtrování)
  • Požadovaný port ze soketu TCP
  • Požadovaný název hostitele uvedený v záhlaví hostitele prohlížečem v požadavku HTTP
  • Požadovaná cesta
  • Jakékoli další hlavičky (cookies atd.)

Zdá se, že jste si všimli, nejběžnější nastavení sdíleného hostingu v dnešní době umisťuje více webů na jednu kombinaci IP adresa:port, přičemž mezi weby může rozlišovat pouze hostitel.

Toto je známé jako Name-Based Virtual Host v Apache-land, zatímco Nginx je nazývá Server Names in Server Blocks a IIS preferuje virtuální server.

A co HTTPS?

HTTPS je trochu jiné. Vše je identické až do navázání TCP spojení, poté však musí být vytvořen šifrovaný TLS tunel. Cílem je, aby neunikly žádné informace o požadavku.

Aby bylo možné ověřit, že webový server skutečně vlastní tuto doménu, musí webový server odeslat certifikát podepsaný důvěryhodnou třetí stranou. Prohlížeč poté tento certifikát porovná s doménou, kterou požadoval.

To představuje problém. Jak webový server ví, který certifikát hostitele/webu má odeslat, pokud to potřebuje udělat před přijetím požadavku HTTP?

Tradičně se to řešilo vyhrazením IP adresy (nebo portu) pro každý web vyžadující HTTPS. Je zřejmé, že se to stalo problematickým, protože nám docházejí adresy IPv4.

Zadejte SNI (Indikace názvu serveru). Prohlížeč nyní předává název hostitele během vyjednávání TLS, takže webový server má tyto informace dostatečně včas na odeslání správného certifikátu. Na straně webového serveru je konfigurace velmi podobná konfiguraci virtuálních hostitelů HTTP.

Nevýhodou je, že název hostitele je nyní před šifrováním předán jako prostý text a v podstatě jde o únik informací. To je obvykle považováno za přijatelný kompromis, i když vezmeme-li v úvahu, že název hostitele je v dotazu DNS i tak normálně odhalen.

Co když požadujete webovou stránku pouze podle IP adresy?

Co udělá webový server, když neví, kterého konkrétního hostitele jste požadovali, závisí na implementaci a konfiguraci webového serveru. Obvykle je specifikován „výchozí“, „catch-all“ nebo „fall back“ web, který bude poskytovat odpovědi na všechny požadavky, které explicitně neurčují hostitele.

Tato výchozí webová stránka může být její vlastní nezávislá webová stránka (často zobrazující chybovou zprávu), nebo to může být jakákoli jiná webová stránka na webovém serveru v závislosti na preferencích správce webového serveru.


Chcete něco dodat k vysvětlení? Ozvi se v komentářích. Chcete si přečíst další odpovědi od ostatních technicky zdatných uživatelů Stack Exchange? Podívejte se na celé diskusní vlákno zde.

ČTĚTE DALŠÍ

  • › Jak přidat, zobrazit a odebrat konce stránek a oddílů v Dokumentech Google
  • › Jak někoho odblokovat na Facebook Messengeru
  • › Jak obnovit smazané soubory a složky v Microsoft OneDrive
  • › Jak omezit váš Chromebook na určité uživatele
  • › Jak změnit svůj Yahoo! Heslo k účtu