Niektóre serwery WWW, gdy uzyskuje się do nich dostęp za pomocą adresu IP, zwracają błąd, że bezpośredni dostęp do adresu IP jest niedozwolony.
Od jakiegoś czasu zastanawiam się, jak to działa. Mam na myśli, czy przeglądarka nie zawsze rozpoznaje adres IP i łączy się z nim? Czy „bezpośredni dostęp do adresu IP” nie pomija DNS? Skąd zdalny serwer wie, że pominęłeś DNS?
networking
dns
apache-http-server
ip
http
Joseph A.
źródło
źródło
Odpowiedzi:
Aby odpowiedzieć na pytanie, skąd to wie , ma to związek z tym, co przeglądarka wysyła do serwera.
Masz rację, że system zawsze rozpoznaje adres IP, ale przeglądarka wysyła adres URL, do którego próbujesz uzyskać dostęp, w nagłówku HTTP.
Oto przykładowy nagłówek, który znalazłem w Internecie, zmodyfikowany tak, aby wyglądał, jakbyś używał Firefoksa w systemie Windows i wpisał
apple.com
w pasku adresu:Oto jak wyglądałby nagłówek, gdybyś użył jego adresu IP:
Oba zostaną wysłane na ten sam adres IP przez gniazdo, ale przeglądarka poinformuje serwer o tym, do czego uzyskał dostęp.
Dlaczego? Ponieważ serwery WWW o tym samym adresie IP mogą hostować wiele witryn i podawać różne strony dla każdej z nich. Nie może rozróżnić, kto chce, która strona ma adres IP, ponieważ wszystkie mają tę samą - ale może odróżnić je według nagłówka HTTP.
źródło
host
nagłówku. Zobacz ten przykład .W przypadku protokołu HTTP 1.1 (poprzednia wersja HTTP 1.0 była już przestarzała, więc jest mało prawdopodobne, aby była używana przez jakąkolwiek najnowszą wersję przeglądarki),
host
nagłówek został wprowadzony. W przypadku protokołu HTTP 1.1 jest to wymagany wiersz nagłówka, który musi zostać wydany przez przeglądarkę . Nazwa domeny jest uwzględniona przez przeglądarkę w tym wierszu, npHost: example.com
. Tak więc serwer internetowy wie, do której strony internetowej przeglądarka chce uzyskać dostęp z tego wiersza. Ponieważ serwer może obsługiwać dziesiątki stron internetowych, wiersz ten jest dla niego ważny, aby ustalić, na której stronie internetowej znajduje się żądana strona. Załóżmy, że przeglądarka chce uzyskać dostęp do strony głównej witryny w przyklad.com, po połączeniu z serwerem wydaje następujący wiersz:Ten wiersz określa, że przeglądarka chce uzyskać dokument główny, tj. „/” Dla witryny. Jeśli chcesz uzyskać dostęp
/somedir/testpage.html
,GET /somedir/testpage.html
będzie w linii „get”. Po linii pojawi się linia poniżej:Jeśli więc serwer WWW obsługuje witryny example.com, someothersite.com, yetanothersite.org itd., Wie, że powinien zwrócić stronę główną example.com. Jeśli nie otrzyma tego wiersza lub nie ma nazwy domeny wymienionej w
Host
wierszu, nie wie, która strona główna witryny powinna zostać zwrócona. Może więc zwrócić komunikat o błędzie lub stronę główną „domyślnej” witryny serwera.Można wydawać takie samo dowodzi problemy przeglądarce przy użyciu telnet protokół, na przykład
telnet example.com 80
z linii poleceń powłoki systemu Linux lub Apple OS X Terminal okna, aby podłączyć do standardowego portu HTTP, port 80 - patrz Testowanie dostępu do strony internetowej za pomocą PuTTY do stepów zrobić to z PuTTY w systemie Windows.źródło
Wynika to z
Host:
nagłówka HTTP. Jest to bardzo przydatne w przypadku hostowania wielu witryn pod tym samym adresem IP. Na przykład http://www.k7dxs.net/ i http://www.philipgrimes.com/ są na tym samym adresie IP. Jednak ze względu naHost:
nagłówek mogą wyświetlać dwie różne witryny.W przypadku HTTPS, jak wskazał @Toothbrush, używają wskazania nazwy serwera TLS, ponieważ nagłówek hosta jest częścią zaszyfrowanego żądania, a serwer nie wie, który certyfikat zaoferować bez tego.
Zabawny eksperyment: zdobądź dane manipulacji dla Firefoksa (nie znalazłem odpowiednika dla Chrome) i zacznij manipulować. Otwórz http://slipstation.com/ i edytuj
Host:
nagłówek w żądaniu na http://www.zombo.com/ . Zobaczysz prawdopodobnie znaną stronę internetową, na której wszystko jest możliwe.źródło
Serwer WWW można skonfigurować tak, aby akceptował tylko połączenia z określoną domeną lub subdomeną. Może to być hosting wielu domen.
To, co robi serwer WWW, gdy używany jest bezpośredni adres IP, można konfigurować. W przypadku Apache domyślnie przejdzie do pierwszego hosta o nazwie vhost spośród włączonych stron, które są posortowane alfanumerycznie.
Jest to najbardziej odpowiednia część dokumentacji Apache, którą znalazłem po szybkim wyszukiwaniu:
https://httpd.apache.org/docs/current/vhosts/name-based.html
źródło