公众号旧文
为什么修改 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 开始的。
只不过当年的你,并没有意识到而已。
扩展阅读: