很早以前就想寫一篇關於頁面請求整個過程的文章。固然,這樣的文章網上處處都是。並且本身寫的並無比別人好,那爲何還要寫那。人都是善忘的動物,寫下來主要是做爲備忘,同時鍛鍊下本身的表達能力。畢竟能把一個問題講明白才能說明真正的懂了。php
DNS 解析過程:css
瀏覽器緩存 - 瀏覽器會緩存 DNS記錄一段時間,俺電腦上的谷歌瀏覽器默認是1分鐘。html
hosts 文件 - 不一樣系統放置的目錄不同,Mac 是在 /etc/hosts.linux
路由器緩存 - 額,這個就沒什麼好說的了。瀏覽器
ISP 解析服務器 - 其實這個是 DNS記錄的緩存。緩存
遞歸查詢 - 這個過程詳細能夠google。這個查詢是由 ISP 的解析服務器發起的,因此查到後,ISP 會將記錄緩存後發送給瀏覽器。服務器
注:DNS 查找的過程就這樣完成了, 假設查詢到的 IP 地址爲 115.26.23.117。值得注意的是(4)中,通常默認是運營商解析服務器。好比筆者用的是聯通的寬帶,默認的就是聯通的解析服務器。linux/mac 能夠經過 cat /etc/resolv.conf 查看。google
TCP 鏈接創建須要經歷三次握手(SYN -> SYN+ACK -> ACK)spa
詳細的報文分析能夠參考《HTTP權威指南》,這裏不作贅述。
如圖1,其實是Nginx 接收了請求。code
如圖1,請求經Nginx 轉發給App Server 進行處理。
請求處理就是一個可以讀懂請求而且可以生成HTML來進行響應的程序(像Python、PHP、Ruby)。
APP Server 生成一個HTML響應經Nginx 返回給瀏覽器。
在瀏覽器沒有完整接受所有HTML文檔時,就開始顯示頁面了。
瀏覽器會根據響應報頭的信息來決定如何解釋該響應。
如:<link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=TcLu_VRYP-hjFEuOQ-7LRL7nW7QGyV_7JTjhUjBtzsY1">
1. 加深下記憶
2. 參考: http://www.cnblogs.com/wenanr...