Serverele Web suportă doar un singur site?
Când începeți să învățați cum se potrivesc și lucrează împreună numele de domenii, adresele IP, serverele web și site-urile Web, poate fi uneori confuz sau copleșitor uneori. Cum se face totul pentru a funcționa atât de bine? Postul de astăzi SuperUser Q & A are răspunsurile la întrebările curioase ale cititorului.
Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.
Fotografie prin amabilitatea lui Rosmarie Voegtli (Flickr).
Intrebarea
Cititorul de utilizatori SuperUser3407319 dorește să știe dacă serverele web dețin doar un singur site:
Pe baza a ceea ce am înțeles despre DNS și legarea unui nume de domeniu cu adresa IP a serverului web pe care este stocat un site web, înseamnă că fiecare server web poate conține numai un singur site web? Dacă serverele web dețin mai mult de un site Web, atunci cum se rezolvă totul, astfel încât să pot accesa site-ul pe care îl doresc fără probleme sau amestecări?
Serverele web dețin fiecare câte un singur site sau dețin mai multe?
Răspunsul
Comerciantul SuperUser Bob are răspunsul pentru noi:
În principiu, browserul include numele de domeniu în cererea HTTP, astfel încât serverul web să știe ce domeniu a fost solicitat și poate răspunde în mod corespunzător.
Solicitări HTTP
Iată cum se întâmplă solicitarea HTTP tipică:
1. Utilizatorul furnizează o adresă URL, sub forma http: // host: port / path.
2. Browserul extrage partea gazdă (domeniu) a adresei URL și o traduce într-o adresă IP (dacă este necesar) într-un proces cunoscut sub numele de rezoluție de nume. Această traducere poate apărea prin DNS, dar nu trebuie să fie (de exemplu, fișierul gazdă local pe sisteme de operare obișnuite ocolește DNS-ul).
3. Browserul deschide o conexiune TCP la portul specificat sau implicit la portul 80 pe acea adresă IP.
4. Browserul trimite o solicitare HTTP. Pentru HTTP / 1.1, se arată astfel:
Antetul gazdă este standard și necesar în HTTP / 1.1. Nu a fost specificat în spec. HTTP / 1.0, dar unele servere îl acceptă oricum.
De aici, serverul web are mai multe informații pe care le poate utiliza pentru a decide care ar trebui să fie răspunsul. Rețineți că este posibil ca un singur server web să fie legat de mai multe adrese IP.
- Adresa IP solicitată, din soclul TCP (adresa IP a clientului este de asemenea disponibilă, dar acest lucru este rar folosit și uneori pentru blocarea / filtrarea)
- Portul solicitat, de la soclul TCP
- Numele gazdei solicitat, așa cum este specificat în antetul gazdă de către browser în cererea HTTP
- Calea cerută
- Orice alte antete (cookie-uri etc.)
După cum pare să fi observat, cea mai obișnuită setare de găzduire partajată în zilele noastre pune mai multe site-uri pe o singură adresă IP: combinație de porturi, lăsând doar gazdă să facă diferența între site-uri web.
Aceasta este cunoscută ca un gazdă virtuală bazată pe nume în Apache-land, în timp ce Nginx le numește nume de server în blocuri server și IIS preferă serverul virtual.
Despre HTTPS?
HTTPS este un pic diferit. Totul este identic cu stabilirea conexiunii TCP, dar după aceea trebuie să fie creat un tunel TLS criptat. Scopul este să nu se scurgă nicio informație despre cerere.
Pentru a verifica dacă serverul web deține de fapt acest domeniu, serverul web trebuie să trimită un certificat semnat de o terță parte de încredere. Browserul va compara acest certificat cu domeniul solicitat.
Aceasta prezintă o problemă. Cum știe serverul web ce certificat de gazdă / site web să trimită dacă trebuie să facă acest lucru înainte ca cererea HTTP să fie primită?
În mod tradițional, acest lucru a fost rezolvat printr-o adresă IP dedicată (sau port) pentru fiecare site web care necesită HTTPS. Evident, acest lucru a devenit problematic, pe măsură ce depășim adresele IPv4.
Introduceți SNI (denumirea numelui serverului). Browserul trece acum numele gazdei în timpul negocierilor TLS, astfel încât serverul web are aceste informații destul de devreme pentru a trimite certificatul corect. Pe partea serverului web, configurația este foarte asemănătoare cu modul în care sunt configurate gazdele virtuale HTTP.
Dezavantajul este că numele gazdei este acum trecut ca text simplu înainte de criptare și este, în esență, scurgeri de informații. Acest lucru este de obicei considerat un compromis acceptabil, deși considerăm că numele gazdei este în mod normal expus într-o interogare DNS oricum.
Ce se întâmplă dacă solicitați un site web doar prin adresa IP??
Ce face serverul web atunci când nu știe care gazdă specifică pe care ați solicitat-o depinde de implementarea și configurarea serverului web. În mod obișnuit, există un site web "implicit", "captură totală" sau "cadă înapoi" specificat care va oferi răspunsuri la toate solicitările care nu specifică în mod explicit o gazdă.
Acest site web implicit poate fi propriul site web independent (afișând adesea un mesaj de eroare) sau ar putea fi oricare dintre celelalte site-uri de pe serverul web, în funcție de preferințele administratorului serverului web.
Aveți ceva de adăugat la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.