用瀏覽器訪問網站很快,但是用curl命令列訪問卻很慢
這幾天遇到一個問題 問題的症狀是這樣的
開啟一個網站,用瀏覽器開啟非常快,但是用命令列的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解析(梯子)