Jika situs web lokal atau server pengembangan berfungsi di 127.0.0.1 tetapi gagal di localhost, atau berfungsi pada satu kelompok alamat tetapi tidak pada yang lain, periksa listening address server dan uji setiap jalur secara terpisah. Di Mac, 127.0.0.1 adalah alamat loopback IPv4 dan ::1 adalah alamat loopback IPv6; keduanya merujuk ke komputer Anda sendiri. Keberhasilan pengujian pada salah satunya tidak membuktikan bahwa layanan tersebut mendengarkan pada yang lain.

1. Periksa apakah layanan sedang mendengarkan (listening)

Gunakan port yang seharusnya dilayani oleh aplikasi Anda. Contoh di bawah ini menggunakan port 8000; ganti dengan port yang sebenarnya.

lsof -nP -iTCP:8000 -sTCP:LISTEN

lsof menampilkan daftar file yang terbuka, termasuk soket jaringan. Opsi-opsi tersebut mempersempit hasil hanya ke listener TCP pada port tersebut dan menghindari resolusi nama. Jika tidak ada keluaran, layanan mungkin tidak berjalan, mungkin menggunakan port yang berbeda, atau belum membuka listener TCP. Periksa keluaran startup aplikasi dan port yang dikonfigurasi sebelum mengubah pengaturan jaringan macOS. (manual lsof)

Lihat alamat di kolom NAME. Listener yang ditampilkan pada 127.0.0.1:8000 terikat (bound) ke loopback IPv4; yang ditampilkan pada [::1]:8000 terikat ke loopback IPv6. Alamat wildcard dapat mengindikasikan mendengarkan pada lebih dari sekadar loopback, tergantung pada server dan sistem operasi. Kunci diagnostiknya adalah apakah alamat pengikatan (bind address) server yang sebenarnya mencakup kelompok alamat yang sedang Anda uji. Interpretasi ini mengikuti alamat soket yang dilaporkan oleh lsof; konfigurasi aplikasi menentukan alamat mana yang dibuka oleh server.

2. Uji IPv4 dan IPv6 secara langsung

Lakukan permintaan ke port dan jalur yang sama melalui setiap alamat loopback. curl memungkinkan Anda menguji koneksi HTTP tanpa bergantung pada pemilihan alamat oleh browser.

curl -v --connect-timeout 3 http://127.0.0.1:8000/
curl -g -v --connect-timeout 3 'http://[::1]:8000/'

Tanda kurung siku diperlukan di sekitar literal IPv6 dalam URL; -g memberi tahu curl untuk tidak memperlakukannya sebagai sintaks URL globbing. Tanda kutip tunggal mempertahankan URL secara harfiah di shell default macOS. Curl mendokumentasikan aturan URL ini dan menyediakan --ipv4 serta --ipv6 untuk membatasi resolusi nama host. (sintaks URL curl, manual curl)

Penolakan koneksi biasanya berarti tidak ada listener yang menerima koneksi di alamat dan port tersebut. Waktu habis (timeout) menunjukkan koneksi tidak selesai dalam batas waktu. Jika curl mencetak respons HTTP, termasuk status kesalahan seperti 404, koneksi TCP dan HTTP berhasil mencapai server; selidiki jalur atau respons aplikasi alih-alih menganggapnya sebagai kegagalan koneksi IPv4/IPv6.

3. Bandingkan localhost dengan setiap alamat

Sekarang uji nama host menggunakan opsi IPv4 dan IPv6 dari curl, lalu coba tanpa batasan kelompok alamat:

curl -4 -v --connect-timeout 3 http://localhost:8000/
curl -6 -v --connect-timeout 3 http://localhost:8000/
curl -v --connect-timeout 3 http://localhost:8000/

Opsi -4 dan -6 pada curl meminta alamat IPv4 saja atau IPv6 saja untuk nama host. Dokumentasinya mencatat bahwa macOS dapat mengembalikan alamat IPv4-mapped pada permintaan resolusi IPv6-only, jadi perlakukan pengujian ini sebagai upaya koneksi terbatas oleh curl, bukan sebagai audit lengkap dari perilaku resolver setiap aplikasi. (manual curl)

Gunakan hasilnya untuk mempersempit penyebabnya. Jika pengujian langsung IPv4 berhasil dan pengujian langsung IPv6 gagal, sementara lsof hanya menampilkan listener IPv4, server kemungkinan perlu dikonfigurasi untuk mendengarkan di IPv6 juga jika akses IPv6 diperlukan. Hal sebaliknya berlaku jika hanya listener IPv6 yang berfungsi. Jika kedua pengujian langsung berfungsi tetapi localhost tidak, bandingkan hasil curl dengan pembatasan kelompok alamat dan periksa pengaturan nama host, proksi, atau URL aplikasi. Berbagai aplikasi dapat menyelesaikan (resolve) atau terhubung ke nama dengan cara yang berbeda; Apple merekomendasikan API jaringan yang agnostik terhadap kelompok alamat bagi pengembang yang membangun aplikasi yang perlu menangani IPv4 dan IPv6. (Apple Developer: Mendukung Jaringan IPv6-only)

4. Terapkan perbaikan sesuai dengan bukti yang ditemukan

Ketika hanya satu alamat loopback yang menerima koneksi, ubah konfigurasi bind-address server lokal atau gunakan kelompok alamat yang memang didukungnya. Jangan berasumsi bahwa mengubah pengaturan Wi-Fi IPv4 atau IPv6 di Mac akan memperbaiki listener loopback: permintaan loopback menargetkan Mac itu sendiri, sedangkan pengaturan Jaringan tersebut mengonfigurasi koneksi jaringan antarmuka. Kontrol TCP/IP Apple dapat mengonfigurasi IPv4 dan IPv6 untuk layanan jaringan yang dipilih, tetapi tidak mengonfigurasi soket mendengarkan dari aplikasi individual. (Dukungan Apple: Mengubah pengaturan TCP/IP di Mac)

Jika kedua alamat langsung tidak berfungsi, pastikan bahwa server sedang berjalan, port sudah benar, dan protokol yang diharapkan adalah HTTP atau HTTPS. Jika salah satu alamat langsung berfungsi tetapi pengujian nama host berbeda, gunakan alamat lsof dan keluaran curl secara bersamaan untuk memutuskan apakah akan menyesuaikan bind address server atau URL klien. Urutan ini membedakan ketiadaan listener dari masalah pengikatan khusus kelompok alamat tanpa berasumsi bahwa setiap kegagalan localhost adalah masalah DNS.

Sumber