公众号旧文

为什么修改 hosts 就能去广告?

作者:胖子阅读 —

很多年前,互联网上曾流行过一种古老的去广告方法:

修改 hosts 文件。

那时候,浏览器插件还没现在这么强。

很多人屏蔽广告,不靠扩展,而是直接手改系统里的一个文件:

hosts

近来我才发现这个小文件,居然是整个互联网里,非常底层的一环。

而且它同时存在于 Linux 和 Windows 中。

Linux:

/etc/hosts

Windows:

C:\Windows\System32\drivers\etc\hosts

连名字都一模一样。

今天这篇文章,我们就来聊聊 hosts 到底是干什么的。

一、hosts 的作用是什么?

很多人都知道,浏览器在访问网站时,会去用 DNS 解析域名。

但实际上,在访问 DNS 之前,系统往往会先看一眼 hosts 文件。

比如访问:

example.com

系统会先检查 hosts 文件里,有没有 example.com 的记录。

如果有,那就直接使用。

不会去问 DNS。

也就是说 hosts 本质上是一个:

域名 → IP

的本地映射表。

比如:

1.2.3.4 example.com

意思就是,以后访问 example.com,直接去 1.2.3.4。

别问 DNS 了。

二、为什么以前能靠 hosts 屏蔽广告?

因为广告,通常也是从某个域名加载的。

比如:

ad.xxx.com

那如果我们在 hosts 里写:

127.0.0.1 ad.xxx.com

系统就会认为:

ad.xxx.com = 127.0.0.1

127.0.0.1 也就是你自己的电脑。

于是浏览器去请求广告时,访问请求就打到了本机。

广告服务器根本没收到请求,广告自然也就加载失败了。

这就是很多年前改 hosts 去广告的原理。

以前网上还有各种 hosts 去广告大全,可以下载下来直接替换。

三、为什么 hosts 的优先级这么高?

因为它比 DNS 更古老。

在互联网早期,机器数量很少。

那时候没有现代 DNS。

所有主机名,都是靠一份统一的 hosts 文件分发的。

后来互联网爆炸增长,一份 hosts 已经根本管不过来。

DNS 才逐渐诞生。

但 hosts 的机制却被保留了下来。

于是直到今天现代操作系统依然还支持 hosts。

四、hosts 到现在还有什么用?

比如开发测试。

很多程序员都会这样:

127.0.0.1 test.example.com

这样就能把域名临时指向本机。

还有内网调试。

或者强制某个域名解析到指定 IP。

再或者绕过 DNS 污染。

甚至一些公司内网会大量依赖 hosts。

五、为什么有时候改了 hosts 却不生效?

因为现代系统通常还有 DNS 缓存。

Windows:

ipconfig /flushdns

Linux 有时也需要:

systemd-resolve --flush-caches

否则系统可能继续使用旧缓存。

六、一个容易忽略的细节

很多人第一次看到:

127.0.0.1 localhost

时会觉得很奇怪。

但其实这也是 hosts 文件里的经典内容。

意思是 localhost 这个名字。

永远指向本机。

可以说很多人第一次接触域名解析。

不是通过 DNS,而是从 hosts 开始的。

只不过当年的你,并没有意识到而已。

扩展阅读:

关于“胖子百科”被“网络技术联盟站”多次洗稿的说明

关于“胖子百科”被瑞哥小号“网络技术干货圈”更多次洗稿的说明

还在买服务器存图片?胖子教你搭建免费图床

查域名,除了用 whois,还能用什么?请一定要看到最后。