hosts文件是一种无扩展名的系统文件,它位于Windows系统的C:\Windows\System32\drivers\etc路径下,而在macOS/Linux/iOS/Android系统中则位于/etc/hosts路径下。该文件的主要功能是建立一个网址域名与对应IP地址的映射关系,当用户在浏览器中输入一个网址时,浏览器会首先在本地hosts文件中查找对应的IP地址,如果找到则直接访问该IP地址,如果没有找到,则系统会将网址提交到DNS域名解析服务器进行IP地址的解析。
在另一篇文章中提到的“电脑上打不开github解决办法”中,也是通过修改hosts文件来实现的。
下面通过一个实验来展示如何通过修改hosts文件实现访问本地的baidu.com服务。首先,在hosts文件中将baidu.com映射到本地的127.0.0.1地址,直接添加在文件最后即可,如下所示:
修改完成后保存,如果提示没有修改权限,可以通过以下方法尝试解决:
保存后,刷新本地DNS,命令:ipconfig/flushdns
接下来,我们可以在本地启动一个后端服务或前端项目,例如在localhost:8088端口启动一个前端vue项目。此时,在浏览器中输入baidu.com:8088,并不会打开百度的网站,如果是webpack打包运行的项目,可能会看到显示“Invalid Host header”。
实际上,我们已经通过baidu.com访问了本地服务。至于显示的“Invalid Host header”而不是本地网页,这是因为webpack的一项安全检查设置:devServer.allowedHosts。可以通过以下方式解决这个问题:
设置完成后,就可以正常通过baidu.com:8088访问本地运行的服务了。
hosts域名访问原理在开发和测试中的应用:在开发过程中,如果需要使用多个环境或多台服务器,可以通过设置自定义域名来方便地切换开发测试。例如,在与后端联调接口时,需要访问特定的局域网IP地址,或者前端请求不能直接通过IP地址发起请求时,或者运维未配置开发环境域名时,可以新增域名映射来实现访问特定的IP。
在移动端开发测试中,也可以通过hosts文件,将手机上的代理设置到电脑上,实现访问特定IP地址的目的。例如,业务需要对接第三方,测试环境外网无法访问或需要特定的IP白名单才能访问时,也可以通过域名映射来实现访问。
管理和切换hosts文件工具:SwitchHosts