Czym jest localhost? Loopback, 127.0.0.1 i ::1
localhost oznacza zwykle komputer, z którego wysyłane jest żądanie. Jego znane adresy to 127.0.0.1 w IPv4 i ::1 w IPv6. Ruch kierowany na te adresy jest obsługiwany wewnątrz stosu sieciowego tej maszyny i nie przechodzi przez router domowy do internetu. Test na localhost odpowiada więc na wąskie pytanie: czy usługa działa lokalnie?
Zakresy adresów pętli zwrotnej
IPv4 rezerwuje na pętlę zwrotną cały blok 127.0.0.0/8, choć w przykładach niemal zawsze pojawia się 127.0.0.1. IPv6 ma specjalny adres ::1/128. Ich rolę opisują RFC 1122 i RFC 4291. Nazwa localhost zwykle rozwiązuje się na te adresy dzięki lokalnej konfiguracji systemu. Konkretna aplikacja może najpierw próbować IPv4 albo IPv6, więc to, że działa jedna wersja, a druga nie, nie musi oznaczać, że cała sieć nie działa.
Przykład z lokalnym serwerem WWW
Programista uruchamia aplikację nasłuchującą na 127.0.0.1:8000 i otwiera http://localhost:8000 na tym samym komputerze. To przydatny test, który nie wystawia aplikacji na inne urządzenia. Jeśli telefon w tej samej sieci Wi-Fi otworzy localhost:8000, spróbuje połączyć się sam ze sobą, a nie z komputerem programisty. Aby telefon dotarł do aplikacji, usługa musi nasłuchiwać na odpowiednim interfejsie sieciowym, zapora musi dopuszczać połączenie, a telefon musi użyć adresu komputera w sieci LAN. Nie udostępniaj serwera deweloperskiego w szerszym internecie bez odpowiedniej ochrony.
Adres nasłuchiwania a dostęp z zewnątrz
Usługa powiązana tylko z 127.0.0.1 lub ::1 nie jest bezpośrednio osiągalna z innego urządzenia. Powiązanie z 0.0.0.0 w IPv4 oznacza zwykle nasłuchiwanie na wszystkich odpowiednich interfejsach IPv4, ale nadal nie gwarantuje dostępu z zewnątrz. Drogę mogą blokować zapory, kontenery, NAT i reguły dostawcy. Podobne zachowanie w IPv6 zależy od aplikacji i ustawień systemu. Test portu od strony internetu nie potwierdzi, że usługa dostępna tylko przez loopback działa lokalnie. Najpierw testuj lokalnie, a potem osobno każdą granicę sieci.
Częsty błąd w kontenerach i na serwerach
W kontenerze lub na zdalnym serwerze localhost oznacza ten kontener lub serwer, a nie Twojego laptopa. Ciąg połączenia z bazą danych wskazujący localhost może więc działać podczas lokalnego programowania, a po wdrożeniu przestać, jeśli baza działa na innej maszynie. Diagnozując problem, ustal, gdzie działa klient, a potem sprawdź docelową nazwę hosta, port i adres, na którym nasłuchuje usługa. Nie zastępuj localhost publicznym adresem IP bez oceny, co zostanie wystawione na zewnątrz. Komunikacja wewnętrzna często wymaga prywatnego adresu sieciowego lub nazwy hosta przeznaczonej dla danej usługi.