este sigur pentru mine să presupun că dacă o vizitez http://www.example.com https://www.example.com http://www.example.com:8080 va raspunde un webserver?
Nu, nu poți presupune nimic.
În timp ce 80 și 443 sunt rezervate IANA pentru HTTP și HTTPS, nimic nu interzice nimănui să ruleze altceva pe acele porturi.
De asemenea, porturile pot fi văzute ca fiind deschise, dar acționând ca o momeală, de la nivelul nucleului.
Sau poate exista un proces atașat cu adevărat, dar din anumite motive nu funcționează corect și, prin urmare, nu va răspunde deloc.
Dar chiar dacă aveți un server web pe deplin funcțional, este posibil să nu primiți răspunsuri sau să nu primiți răspunsul așteptat.
Daca primesti www.example.com
rezolvându-se să 192.0.2.42
, serverul web de la acea adresă IP trebuie încă configurat special pentru a ști despre nume www.example.com
(sau să fie configurat într-un fel de wildcard pentru a accepta orice nume). Dacă nu este configurat, nu va ști ce conținut să trimită înapoi (ar putea fi mai multe site-uri web găzduite pe aceeași adresă IP) și poate trimite fie conținutul unuia dintre site-urile pe care le administrează (ca în Apache, primul declarat în fișierele de configurare) sau returnează o eroare, cum ar fi HTTP 400 sau 500, pentru a spune clientului că numele este greșit.
Se poate întâmpla cu ușurință, deoarece puteți lua orice site web existent, puteți găsi adresa IP a acestuia și apoi în ORICE zonă, adăugați o înregistrare pentru ORICE numele care indică acea adresă IP (sau, în mod similar, pe sistemele Unix, găsește /etc/hosts
).
Desigur, serverul web de la acea adresă IP nu va avea cum să știe despre ce este acest nume nou și, prin urmare, nu va răspunde așa cum se aștepta.
cum ar putea un ip să aibă portul X deschis, dar pentru a-l accesa prin nume de gazdă trebuie să merg la domeniul: Y (unde Y este un port diferit de X)
Acea parte nu este clară. Adresele IP nu au „porturi”. S-ar putea să fie nevoie să vă documentați pe modelul OSI cu 7 straturi de rețea sau pe modelul Internet. Pe scurt, în partea de jos aveți IPv4 și IPv6 și nu există porturi acolo, acest concept pur și simplu nu există. În plus, aveți protocoale precum TCP și UDP, care definesc porturi. O conexiune TCP este un tuplu de 4 elemente: IP sursă, port sursă, IP destinație, port destinație.
Cam pe deasupra TCP, aveți TLS. O strângere de mână TLS, de obicei, începe cu o extensie „Indicație nume server” în mesajul ClientHello. Această extensie permite clientului să specifice nume de gazdă al gazdei la care încearcă să ajungă la acel nivel IP. Deoarece prin DNS clientul va fi mapat numele de gazdă (cum ar fi extras din URL în cazul HTTPS) la o adresă IP, dar apoi, după cum sa explicat mai sus, acea adresă IP poate face găzduire virtuală în masă a mai multor nume, deci înainte chiar de a trimite primul mesaj HTTP, serverul TLS trebuie să știe pentru ce nume de gazdă este interogat (pentru a putea returna imediat certificatul corect, deoarece acest lucru se întâmplă la începutul strângerii de mână TLS și, evident, înainte de orice schimb HTTP), și asta este ceea ce clientul face folosind extensia SNI.
Dar ceea ce descrieți se poate întâmpla în unele cazuri de proxy și/sau cloacking de domeniu.