Tại sao Chrome bỏ qua / etc / hosts trên OS X?


27

Tôi đang sử dụng OS X 10.8.5 và Chrome 30.

Tôi đã thêm vào tập tin 127.0.0.1 youtube.comcủa mình /etc/hostsđể nó chứa cái này:

# 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

Khi tôi chạy lệnh, traceroute youtube.comtôi nhận được kết quả mong đợi (youtube.com được phân giải thành 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

Tuy nhiên, khi tôi nhập youtube.com trong Chrome, trình duyệt của tôi không thiết lập kết nối với 127.0.0.1 mà thay vào đó là địa chỉ IP "bình thường" cho YouTube. Tôi đã mong đợi Chrome sẽ phân giải youtube.com thành 127.0.0.1.

Tôi đã cấu hình Chrome để sử dụng cài đặt proxy của hệ thống. Trong OS X, khi tôi đi đến Tùy chọn hệ thống> Mạng> "Nâng cao ..."> Proxy, tôi đã chọn "Tự động phát hiện proxy".

Tại sao Chrome dường như bỏ qua /etc/hoststệp của tôi ?


4
Bạn có chắc chắn đang cố gắng giải quyết youtube.com chứ không phải www.youtube.com không? Cũng có thể là youtube.com có ​​một chuyển hướng 301 được trình duyệt lưu vào bộ nhớ cache để nó thậm chí không cố gắng liên hệ với youtube.com (không phải trên máy tính của tôi để kiểm tra).
user2313067

@ user2313067 Cảm ơn bạn! Tôi đã sửa đổi / etc / hosts để có một dòng cho www.youtube.com giải quyết thành 127.0.0.1 và điều đó đã tạo ra mánh khóe.
Jonathan

@ user2313067 Bạn có thể muốn gửi bình luận của bạn dưới dạng câu trả lời.
Blacklight Shining


bạn có thể đang sử dụng VPN hoặc tiện ích mở rộng chrome thay đổi kết nối của bạn trong một ngày nào đó
user1735921

Câu trả lời:


8

Hãy thử thêm www.youtube.comvào tập tin máy chủ của bạn. youtube.comđược chuyển hướng vĩnh viễn đến www.youtube.com, miễn là bạn đã truy cập youtube.commột lần, trình duyệt của bạn sẽ lưu lại phản hồi này và chuyển hướng bạn đến www.youtube.com. Địa chỉ này không có trong tệp máy chủ của bạn, vì vậy chrome giải quyết một cách chính xác.


1
Làm điều này để xóa chuyển hướng superuser.com/questions/304589/ của bạn hoặc chỉ sử dụng chế độ ẩn danh để phát triển
james.c.funk

1
Thêm wwwkhông làm việc cho tôi. Ngay cả sau khi xóa tất cả dữ liệu trình duyệt của tôi và xóa DNS của tôi. Có lẽ đây là một biện pháp chống lừa đảo được đưa vào Chrome?
F1lt3r

thêm cả trần truồng và www. các phiên bản trong tập tin máy chủ làm việc cho tôi. Tôi cũng đã tắt chrome: // flags / # enable-new-preconnectect trong Chrome
LyK

10

Google Chrome bỏ qua tệp máy chủ của bạn và thực hiện tra cứu DNS thực tế (mặc dù những gì người khác có thể nghĩ, /etc/hostskhông phải là một phần của DNS, đó là những gì đã được sử dụng trước DNS). Mặc dù Google Chrome nên tôn trọng các mục lưu trữ tệp đó nhưng không. Tệp máy chủ, là một thay thế cho DNS, sẽ được đọc khi không có máy chủ DNS nào (như nếu bạn tắt kết nối mạng của mình).

Bạn có thể kiểm tra điều này bằng cách thêm "127.0.0.1 foobar.dev" vào tệp máy chủ của mình, sau đó bật wireshark và xem trên giao diện mạng của bạn. Mở Chrome và đặt http://foobar.dev/vào thanh địa chỉ của bạn và đi. Bạn sẽ thấy một truy vấn DNS trong Wireshark, đại loại như:

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

FWIW, Google DNS trả về 127.0.53.53 cho foobar.dev.

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

Một cách giải quyết khác là sử dụng HostAdmin , một tiện ích mở rộng cũ hơn của Chrome giúp Chrome sử dụng máy chủ lưu trữ. Tuy nhiên, các phiên bản Chrome mới hơn (> 38, xuất hiện) không còn hỗ trợ nữa.


Chrome thực sự không bỏ qua /etc/hoststệp trên OS X. Ít nhất không phải Chrome v43 trên OS X 10.10.3.
Petr Peller

Wireshark kể một câu chuyện khác.
Karl Wilbur

1
Thực tế là Chrome cũng truy vấn DNS của Google có thể không có nghĩa là / etc / hosts bị bỏ qua. Điều này có thể chỉ đơn giản cho mục đích tối ưu hóa / đăng nhập / gián điệp. Tôi sử dụng / etc / hosts tệp rất thường xuyên trên OS X và không gặp vấn đề gì với Chrome.
Petr Peller

3
Khi tệp máy chủ của tôi có '127.0.0.1 foo.dev' và Chrome giải quyết một cách kỳ diệu foo.dev thành 127.0.53.53, đó là IGNORING tệp máy chủ của tôi.
Karl Wilbur

1
Có, nhưng với wifi, Chrome nên sử dụng các tập tin host đầu tiên trước khi thực hiện một tra cứu DNS. Nó không. Đó là vấn đề.
Karl Wilbur

5

Tôi đã khắc phục sự cố này bằng cách: TẮT "Bảo vệ bạn và thiết bị của bạn khỏi các trang web nguy hiểm" trong Tùy chọn nâng cao của Chrome.

"Bảo vệ" tích hợp của Chrome bao gồm kiểm tra trực tiếp tên miền với DNS của chính họ và bỏ qua một số loại mục lưu trữ nhất định mà nó cho là "đáng ngờ" hoặc các mục nhập cho các trang web đang bị ghi đè, có nghĩa là hầu hết các mục lưu trữ tùy chỉnh bị bỏ qua. Đặc biệt là các mục * .dev và * .local được sử dụng để phát triển.

Tắt điều này đã giải quyết vấn đề 100% thời gian cho tôi. Điều này đã khiến tôi phát điên trong nhiều tháng khi thực hiện phát triển địa phương và tôi không thể tìm thấy câu trả lời được liệt kê ở bất cứ đâu, mọi người cứ nói rằng điều đó không thể xảy ra. Hóa ra đó là một chuyển đổi đơn giản trong cài đặt nâng cao. Hy vọng điều này sẽ giúp bạn là tốt, chúc mừng.


Cảm ơn, tôi biết nó đã hoạt động vào tuần trước, tôi đã thay đổi tùy chọn chrome thành mặc định vài ngày trước và nó không còn hoạt động nữa. Nó đã làm việc!
98percentmonkey

Cảm ơn, tôi biết nó đã hoạt động vào tuần trước, tôi đã thay đổi tùy chọn chrome thành mặc định vài ngày trước và nó không còn hoạt động nữa. Nó đã làm việc! Nó được gọi là "Duyệt web an toàn" trong các phiên bản mới hơn
98percentmonkey

0

Localhost là quy ước cho địa chỉ 127.0.0.1 là địa chỉ nội bộ cho tcp / ip, tuy nhiên, Chrome không sử dụng / etc / hosts để giải quyết địa chỉ, nó đang sử dụng máy chủ DNS, do đó mọi địa chỉ không đến từ bạn / etc / hosts, nhưng từ máy chủ DNS, nếu nó đang sử dụng / etc / hosts, nó sẽ phải giữ toàn bộ tên máy chủ www để giải quyết bất kỳ địa chỉ nào.

Hi vọng điêu nay co ich.


1
-1. /etc/hostsghi đè bất kỳ máy chủ DNS. Có, nếu bạn chỉ sử dụng /etc/hosts, nó sẽ phải chứa tất cả các tên miền, nhưng hầu hết các thiết lập cũng bao gồm các máy chủ DNS. Nếu Chrome chỉ yêu cầu HĐH giải quyết tên miền, như vậy , /etc/hostssẽ được kiểm tra trước và nếu nó không chứa mục nhập thì truy vấn DNS sẽ được gửi đi.
Blacklight Shining

/etc/hosts nên ghi đè và yêu cầu DNS nhưng đây không phải là trường hợp của Google Chrome. Nó tạo ra các tra cứu DNS của riêng mình bất chấp những gì có thể trong tệp máy chủ. Điều này dễ dàng được chứng minh. Đây là một vấn đề đặc biệt đối với sự phát triển cục bộ bằng cách sử dụng .devTLD.
Karl Wilbur

0

Tôi vấp phải câu hỏi này khi nghĩ rằng hoststệp không hoạt động trên Chrome cho macOS cho các .devtên miền giả mà tôi sử dụng để phát triển.

Trên thực tế nó không làm việc, ít nhất là trên Chrome 77.

Vấn đề không phải là không tìm thấy tên miền, mà là tất cả .dev hiện được tự động chuyển hướng sang https :

Trang web này không thể truy cập - Chrome

Nếu bạn nhấp đúp vào tên miền, bạn có thể thấy thủ phạm:

https

Bây giờ Google đã phá vỡ .dev, như một giải pháp của chúng tôi , liên kết ở trên gợi ý chuyển sang một TLD khác để phát triển, như .testhoặc .localhost.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.