最近遇到一个问题,我和我的小伙伴都可以正常访问dev环境,产品同学访问不了,拿到我给他的链接就报错,配置了hosts就好了,查了很多,但是都觉得解释不通,下面是根据查询做出的总结。问题描述:为什么要配置hosts文件,解决了什么问题。
百度百科解释
hosts文件,是一个没有扩展名的文件系统,作用是将一些常用的网址域名与其对应的IP地址建立一个关联的数据库,当用户需要在浏览器中输入一个需要登录的网址时,系统自动从hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
配置hosts文件一个常见的需求就是虚拟域名,建立开发和测试的环境,将IP与一个虚拟域名做地址指向,这样在访问的时候就读取hosts。
还有一个就是方便局域网用户,在一些局域网中没有架设DNS服务器,所以需要映射域名和IP。
图解HTTP
在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内指定完整的主机名或者域名的URI。
所以我的理解是,我们在hosts文件里设置了IP和域名的对应关系,发送请求解析DNS时,优先读取hosts文件,相当于填充了HTTP请求的首部。
事实上,在未配置hosts文件时,发送的HTTP请求的头部是没有IP地址的,所以报错信息为:
1 | ERR_NAME_NOT_RESOLVED means that the domain name cannot be resolved. |
配置之后,http的首部就会有:
1 | Remote Address: 10.16.208.93:80 |
网友解释
我们在浏览器中输入域名,浏览器会向我们配置的dns去获取这个域名对应的ip,然后再把http请求发送到这个ip上去,因为我们配置的域名是虚拟的,所以通过配置host文件,然后浏览器访问这个ip的时候,直接读取host文件,而不是去访问dns。
个人认为,综合这几种解释就是,hosts文件的优先级高,读取之后,找到IP,就能得到正确的访问位置,问题就是出在DNS解析上,因为这是一个虚拟域名,不配置的话,请求位置就找不到。
在查询过程中,还了解了一下DNS解析,DNS解析是由DNS服务器完成的,我们本机知道DNS服务器的IP地址,才能将域名解析得到域名对应的IP地址,DNS服务器的IP,有可能是动态的,也可以使用公网的IP。
配置hosts文件步骤
1 | // mac os |