Mengapa Chrome mengabaikan / etc / hosts di OS X?

27

Saya menggunakan OS X 10.8.5 dan Chrome 30.

Saya menambahkan 127.0.0.1 youtube.comke /etc/hostsfile saya sehingga sekarang berisi ini:

# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost

127.0.0.1       youtube.com

Ketika saya menjalankan perintah, traceroute youtube.comsaya menerima hasil yang diharapkan (youtube.com diselesaikan ke 127.0.0.1):

traceroute to youtube.com (127.0.0.1), 64 hops max, 52 byte packets
1  localhost (127.0.0.1)  0.272 ms  0.118 ms  0.063 ms

Namun, ketika saya mengetik youtube.com di Chrome, browser saya tidak membuat koneksi dengan 127.0.0.1 tetapi sebaliknya dengan alamat IP "normal" untuk YouTube. Saya berharap Chrome akan menyelesaikan youtube.com menjadi 127.0.0.1.

Saya telah mengonfigurasi Chrome untuk menggunakan pengaturan proxy sistem saya. Di OS X, ketika saya pergi ke System Preferences> Network> "Advanced ..."> Proxy, saya telah memilih "Auto Proxy Discovery".

Mengapa Chrome tampaknya mengabaikan /etc/hostsfile saya ?

Jonathan
sumber
4
Apakah Anda yakin sedang mencoba menyelesaikan youtube.com dan bukan www.youtube.com? Bisa juga youtube.com memiliki 301 redirect yang di-cache oleh browser sehingga bahkan tidak mencoba untuk menghubungi youtube.com (bukan di komputer saya untuk memeriksa).
user2313067
@ user2313067 Terima kasih! Saya merevisi / etc / hosts juga memiliki garis untuk www.youtube.com diselesaikan ke 127.0.0.1 dan itu berhasil.
Jonathan
@ user2313067 Anda mungkin ingin memposting komentar Anda sebagai jawaban.
Blacklight Shining
Anda mungkin menggunakan VPN atau ekstensi chrome yang MENGUBAH koneksi Anda di suatu tempat
user1735921

Jawaban:

8

Coba tambahkan www.youtube.comke file host Anda. youtube.comdialihkan secara permanen ke www.youtube.com, jadi selama Anda telah mengunjungi youtube.comsekali, browser Anda akan men-cache respons ini dan mengarahkan Anda ke www.youtube.com. Alamat ini tidak ada dalam file host Anda, jadi chrome secara logis menyelesaikannya dengan benar.

pengguna2313067
sumber
1
Lakukan ini untuk menghapus pengalihan superuser.com/questions/304589/... atau cukup gunakan mode penyamaran untuk pengembangan
james.c.funk
1
Menambahkan wwwtidak berfungsi untuk saya. Bahkan setelah menghapus semua data browser saya dan membilas DNS saya. Mungkin ini tindakan anti-phishing yang dimasukkan ke Chrome?
f1lt3r
menambahkan telanjang dan www. versi dalam file hosts bekerja untuk saya. Saya juga menonaktifkan chrome: // flags / # enable-new-preconnect di Chrome
LyK
10

Google Chrome mengabaikan file host Anda dan melakukan pencarian DNS yang sebenarnya (terlepas dari apa yang dipikirkan orang lain, /etc/hostsbukan bagian dari DNS, itu adalah apa yang digunakan sebelum DNS). Meskipun Google Chrome harus menghormati entri file host tersebut, namun tidak. File host, sebagai alternatif untuk DNS, akan dibaca ketika tidak ada server DNS yang tersedia (seperti jika Anda menonaktifkan koneksi jaringan Anda).

Anda dapat menguji ini dengan menambahkan "127.0.0.1 foobar.dev" ke file host Anda, kemudian mengaktifkan wireshark dan menonton di antarmuka jaringan Anda. Buka Chrome dan masukkan http://foobar.dev/bilah alamat Anda dan pergi. Anda akan melihat permintaan DNS di Wireshark, sesuatu seperti:

2   1.668727000 192.168.32.104  8.8.8.8 DNS 75  Standard query 0x663a  A foobar.dev

FWIW, Google DNS mengembalikan 127.0.53.53 untuk foobar.dev.

3   1.706484000 8.8.8.8 192.168.32.104  DNS 91  Standard query response 0x663a  A 127.0.53.53

Solusinya adalah dengan menggunakan HostAdmin yang merupakan ekstensi Chrome lama yang membuat Chrome menggunakan host. Namun, versi Chrome yang lebih baru (> 38, dengan tepat) tidak lagi mendukungnya.

Karl Wilbur
sumber
Chrome sebenarnya tidak mengabaikan /etc/hostsfile pada OS X. Setidaknya bukan Chrome v43 pada OS X 10.10.3.
Petr Peller
Wireshark menceritakan kisah yang berbeda.
Karl Wilbur
1
Fakta bahwa Chrome juga menanyakan Google DNS mungkin tidak berarti / etc / hosts diabaikan. Ini bisa hanya untuk keperluan optimasi / logging / spionase. Saya menggunakan file / etc / hosts sangat sering pada OS X dan tidak memiliki masalah dengan Chrome.
Petr Peller
3
Ketika file host saya memiliki '127.0.0.1 foo.dev' dan Chrome secara ajaib menyelesaikan foo.dev ke 127.0.53.53, file itu adalah PENGHARGAAN file host saya.
Karl Wilbur
1
Ya, tetapi dengan wifi aktif, Chrome harus menggunakan file host terlebih dahulu sebelum melakukan pencarian DNS. Itu tidak. Itulah masalahnya.
Karl Wilbur
5

Saya memperbaiki masalah ini dengan: Matikan "Lindungi Anda dan perangkat Anda dari situs berbahaya" di Preferensi Lanjutan Chrome.

"Perlindungan" built-in Chrome termasuk memeriksa domain terhadap DNS mereka sendiri secara langsung dan mem-bypass jenis entri host tertentu yang dianggapnya "mencurigakan" atau entri untuk situs yang ada yang sedang ditimpa, yang berarti sebagian besar entri host kustom diabaikan. Terutama entri * .dev dan * .local yang digunakan untuk pengembangan.

Menonaktifkan ini telah menyelesaikan masalah 100% dari waktu untuk saya. Ini membuat saya marah selama berbulan-bulan ketika melakukan pengembangan lokal dan saya tidak dapat menemukan jawaban yang terdaftar di mana saja, semua orang terus mengatakan itu tidak mungkin terjadi. Ternyata itu adalah beralih sederhana di pengaturan lanjutan. Semoga ini bisa membantu Anda juga, tepuk tangan.

Joshua Jarman
sumber
Terima kasih, saya tahu ini berfungsi minggu lalu, saya mengubah opsi chrome ke default beberapa hari yang lalu dan tidak berfungsi lagi. Berhasil!
98percentmonkey
Terima kasih, saya tahu ini berfungsi minggu lalu, saya mengubah opsi chrome ke default beberapa hari yang lalu dan tidak berfungsi lagi. Berhasil! Ini disebut "Penjelajahan Aman" dalam versi yang lebih baru
98percentmonkey
0

Localhost adalah konvensi untuk alamat 127.0.0.1 yang merupakan alamat internal untuk tcp / ip, namun, Chrome tidak menggunakan / etc / hosts untuk menyelesaikan alamat, itu menggunakan server DNS, oleh karena itu alamat apa pun tidak berasal dari Anda / etc / hosts, tetapi dari server DNS, jika menggunakan / etc / hosts, ia harus menahan seluruh nama host www untuk menyelesaikan alamat apa pun.

Semoga ini membantu.

Moises Najar
sumber
1
-1. /etc/hostsmengganti server DNS apa pun. Ya, jika Anda hanya menggunakan /etc/hosts, itu harus mengandung semua nama domain, tetapi sebagian besar pengaturan juga termasuk server DNS. Jika Chrome hanya meminta OS untuk menyelesaikan nama domain, seperti seharusnya , /etc/hostsakan diperiksa terlebih dahulu, dan jika tidak mengandung entri, maka permintaan DNS akan dikirim.
Blacklight Shining
/etc/hosts harus menimpa dan permintaan DNS tetapi ini tidak terjadi dengan Google Chrome. Itu preforms pencarian DNS sendiri meskipun apa yang mungkin di file host. Ini mudah dibuktikan. Ini secara khusus merupakan masalah untuk pengembangan lokal menggunakan .devTLD.
Karl Wilbur
0

Saya menemukan pertanyaan ini dengan berpikir bahwa hostsfile tidak berfungsi di Chrome untuk macOS untuk .devdomain palsu yang saya gunakan untuk pengembangan.

Sebenarnya itu tidak bekerja, setidaknya pada Chrome 77.

Masalahnya bukan bahwa domain tidak ditemukan, tetapi semua .dev sekarang secara otomatis dialihkan ke https :

Situs ini tidak dapat dijangkau - Chrome

Jika Anda mengklik dua kali pada nama domain, Anda dapat melihat penyebabnya:

https

Sekarang setelah Google memutuskan .dev, sebagai solusi, tautan di atas menyarankan untuk pindah ke TLD lain untuk pengembangan, seperti .testatau .localhost.

Benjamin
sumber