4

What is happening

I have a simple Apache server set up on my machine, accessible via localhost on port 80. When accessing the following addresses :

It does work on Chrome/Firefox and other browsers

ping/curl to localhost works and returns a 200 response.

After adding an entry to my hosts file, to point a host name to localhost, it seems Chrome is not honoring the entries in the hosts file.

Let me explain, my hosts file looks like this now :

# localhost name resolution is handled within DNS itself.
# 127.0.0.1       localhost
# ::1 localhost

::1 mydomain.local

When accessing the host name mydomain.local with Firefox/Edge/Other browsers it returns the default page of my Apache server as a 200 response.
ping/curl to mydomain.local checks out successfully and shows it is actually pointing to localhost at the ::1 ipv6 version of localhost.

Yet somehow, Chrome throws an DNS_PROBE_FINISHED_NXDOMAIN error on that host name.

What has been tried

  • Fresh Chrome install
  • Flushing Windows DNS cache with ipconfig
  • Flushing Chrome DNS cache through chrome://net-internals/
  • Disabling all DNS prefetching and protection settings (I just went through and disabled everything on Chrome https://i.sstatic.net/uAOfp.jpg)
  • Running Chrome with the following flags
    • --dns-prefetch-disable
    • --disable-preconnect
    • --incognito
    • --start-maximized
    • --disable-async-dns

All attempts unsuccessful

System setup

  • Windows 10 Pro x64 (1809)
  • Chrome Version 74.0
  • Firefox Quantum 66.0.3

--
Edit I know that Chrome doesn't play well with some TLDs, I have tried different options, like .loc .test .localhost without success

--
Edit 2
The referenced possible duplicate is 3 years old, and doesn't provide a solution. If there's no solution for this issue, is this behavior documented from Chromium ? That it doesn't allow hosts entries ?

Rezrazi
  • 155

1 Answers1

1

I figured out how to "fix" that, posting it here for future readers.

How did I fix it ?

How did I get Chrome to actually point a host name to localhost ? Actually it's some funky behavior here. Simply by changing the TLD I'm using to .localhost
From Chromium's guidelines, and since the introduction of .dev as a legit TLD, there are some reserved TLDs.

To safely satisfy these needs, four domain names are reserved as listed and described below.

  • .test
  • .example
  • .invalid
  • .localhost

".test" is recommended for use in testing of current or new DNS related code.
".example" is recommended for use in documentation or as examples.
".invalid" is intended for use in online construction of domain names that are sure to be invalid and which it is obvious at a glance are invalid.
The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use. Any other use would conflict with widely deployed code which assumes this use.

Read more here

Yet Chrome didn't point to localhost when I tried using .test it is just ... weird, it should've worked. If anyone has any input on this, please be my guest.
Beware Although this solution worked on my system, it is believed to cause some unexpected behavior on OSX systems.

As of this answer, on Chrome 74, it not possible to disable Chrome's own DNS host resolver, and aside those TLDs, all hosts entries will be ignored

Rezrazi
  • 155