用浏览器访问网站很快,但是用curl命令行访问却很慢

时间:2021-03-02 03:38:25

这几天遇到一个问题 问题的症状是这样的

打开一个网站,用浏览器打开非常快,但是用命令行的curl或者使用python脚本来访问却非常慢

用charles抓包访问了一下发现时间全花在了dns上

接着我就试着修改/etc/hosts文件,无效,虽然访问最终用了hosts文件里面写的ip,但是时间依然浪费在了dns查询上面

清理dns缓存  无效

但是,我通过修改http请求的Host字段,并直接访问服务器的ip,确实是非常快,所以问题还是在dns上

然后我看到的/etc/resolv.conf 文件里面第一个项是127.0.0.1  第二个才是路由器的ip,这个文件是设置dns服务器的 那么一个域名查询请求发出以后首先交给了127.0.0.1来处理了

接着我使用dig命令指定域名服务器127.0.0.1来查询域名的ip,结果大跌眼镜,在等待了20多秒以后dns查询请求超时,并没有返回任何东西,初步断定是本机运行的dns服务软件不服务了,既然找到问题了,那就好解决了,把路由器上的dns服务器设置为首选dns不就好了,天真的我又一次被打击了!修改后并没有任何效果

就在我一筹莫展的时候,我想到使用osx自带的网络设置工具看一看,不看不要紧,一看我擦泪,原来我直接修改文件内的内容并不影响系统设置里面的dns设置,顽固的127.0.0.1依然是首选服务器,在我删掉127.0.0.1这个首选服务器以后,我的路由器上的dns就晋升为了首选dns,这时候访问速度快了

终于解决了这个问题,但是也引出一些问题

1.为啥dns没有缓存下来,每次都查询每次都等待那么长时间

2.为啥修改hosts文件以后最终访问的时候是使用了hosts文件里面的ip,但是dns查询还是消耗了5秒的时间

3.为啥修改了/etc/resolve.conf以后,并不生效,只有修改系统网络设置里面的配置才奇效


最近公司的网络出现问题了,各种卡,加大了调试的难度,目前总结出的东西虽然可以解燃眉之急,但是不给上面的问题找个合理的解释,总觉的不太舒服

如果哪位大侠知道,请不吝赐教


最后猜测一下为什么用浏览器打开会很快呢,我觉的是浏览器自己有自己的dns缓存,因为我的浏览器好像是使用了远程dns解析(*)