Kun aloitat oppia, miten verkkotunnukset, IP-osoitteet, web-palvelimet ja sivustot sopivat yhteen ja toimivat yhdessä, se voi olla hämmentävää tai ylivoimaista joskus. Kuinka kaikki on perustettu toimimaan niin sujuvasti? Tänään SuperUser Q & A -postilla on vastauksia utelias lukijan kysymyksiin.
Tämän päivän kysymys- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.
Photo courtesy of Rosmarie Voegtli (Flickr).
SuperUser-lukija user3407319 haluaa tietää, onko verkkopalvelimilla vain yksi verkkosivusto:
Sen perusteella, mitä ymmärrän DNS: stä ja verkkotunnuksen liittämisestä verkkopalvelimen IP-osoitteeseen, verkkosivusto on tallennettu, merkitseekö siis, että kukin verkkopalvelin voi pitää vain yhtä verkkosivustoa? Jos web-palvelimissa on useampi kuin yksi verkkosivusto, miten se kaikki ratkaistaan niin, että voin käyttää halutulla verkkosivustolla mitään ongelmia tai sekaantua?
Onko web-palvelimilla vain yksi sivusto, vai pitävätkö ne enemmän?
SuperUser-avustajalla Bobilla on vastaus meille:
Pohjimmiltaan selaimessa on verkkotunnus HTTP-pyynnössä, joten verkkopalvelin tietää, minkä verkkotunnuksen pyydettiin ja voi vastata sen mukaisesti.
HTTP-pyynnöt
Tässä on tyypillinen HTTP-pyyntösi:
1. Käyttäjä antaa URL-osoitteen muodossa http: // host: portti / polku.
2. Selain erottaa URL-osoitteen isäntänä (domain) osan ja kääntää sen IP-osoitteeksi (jos tarpeen) ns. Tämä käännös voi tapahtua DNS: n välityksellä, mutta sen ei tarvitse (esimerkiksi paikallisten isäntätiedostojen yhteiset käyttöjärjestelmät ohittavat DNS: n).
3. Selain avaa TCP-yhteyden määritettyyn porttiin tai oletusarvoisesti portti 80 kyseisessä IP-osoitteessa.
4. Selain lähettää HTTP-pyynnön. HTTP / 1.1: lle tämä näyttää tältä:
Isäntäotsikko on vakio ja vaaditaan HTTP / 1.1: ssä. Sitä ei määritetty HTTP / 1.0 -sovelluksessa, mutta jotkut palvelimet tukevat sitä joka tapauksessa.
Sieltä web-palvelimella on useita tietoja, joita se voi käyttää päättääkseen vastauksen. Huomaa, että yksittäisen web-palvelimen on mahdollista sitoa useita IP-osoitteita.
- Pyydetty IP-osoite TCP-liitännästä (asiakkaan IP-osoite on myös käytettävissä, mutta sitä käytetään harvoin ja joskus estää / suodattaa)
- Pyydetty portti TCP-liitännästä
- Pyydetty isäntänimi HTTP-pyynnössä selaimen isäntänä otsikon mukaisesti
- Pyydetty polku
- Kaikki muut otsikot (evästeet jne.)
Kuten näytätte huomannut, yleisimpiä jaettua hosting-asetusta nykyään laittaa useita verkkosivustoja yhteen IP-osoitteeseen: porttiyhdistelmä, jolloin isäntä eroaa verkkosivustoista.
Tätä kutsutaan Apache-maan nimipalvelimena, kun taas Nginx kutsuu palvelimen nimet palvelinlohkoiksi ja IIS suosittelee Virtual Serveria.
Entä HTTPS?
HTTPS on hieman erilainen. Kaikki on samanlaista TCP-yhteyden muodostamisen jälkeen, mutta sen jälkeen on luotava salattu TLS-tunneli. Tavoitteena ei ole vuotaa tietoja pyynnöstä.
Jotta varmistettaisiin, että web-palvelin tosiasiallisesti omistaa tämän verkkotunnuksen, verkkopalvelimen on lähetettävä luotettava kolmannen osapuolen allekirjoittama varmenne. Selaimella verrataan tätä varmennetta sen pyytämän verkkotunnuksen kanssa.
Tämä on ongelma. Miten web-palvelin tietää, mikä isäntä / verkkosivuston todistus lähetetään, jos se on tarpeen ennen HTTP-pyynnön vastaanottamista?
Perinteisesti tämä ratkaistiin omistamalla oma IP-osoite (tai portti) jokaiselle verkkosivustolle, joka vaatii HTTPS: tä. On selvää, että tämä on tullut ongelmalliseksi, kun käytämme IPv4-osoitteita.
Anna SNI (palvelimen nimi). Selain siirtää isäntänimen TLS-neuvottelujen aikana, joten verkkopalvelimella on nämä tiedot riittävän ajoissa lähettämään oikea todistus. Web-palvelimen puolella kokoonpano on hyvin samanlainen kuin HTTP-virtuaali-isännät on määritetty.
Haittapuoli on, että isäntänimi on nyt läpäissyt pelkkänä tekstinä ennen salausta, ja se on olennaisesti vuotanut tieto. Tätä pidetään yleensä hyväksyttävänä kompromissina, vaikka isäntänimi yleensä altistetaan DNS-kyselylle.
Mitä jos pyydät verkkosivustoa vain IP-osoitteella?
Mitä web-palvelin tekee, kun se ei tiedä, mikä yksittäinen vastaanottaja pyydät, riippuu verkkopalvelimen toteutuksesta ja kokoonpanosta. Tyypillisesti on määritetty "oletus", "catch-all" tai "fall back" -sivusto, joka antaa vastaukset kaikkiin pyyntöihin, joissa ei nimenomaisesti määritetä isäntäkonetta.
Tämä oletushakemisto voi olla oma itsenäinen verkkosivusto (usein virheilmoitus) tai se voi olla mikä tahansa verkkosivustojen muilla verkkosivustoilla riippuen verkkopalvelimen järjestelmänvalvojan asetuksista.
Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.