很早以前就想写一篇关于页面请求整个过程的文章。固然,这样的文章网上处处都是。并且本身写的并无比别人好,那为何还要写那。人都是善忘的动物,写下来主要是做为备忘,同时锻炼下本身的表达能力。毕竟能把一个问题讲明白才能说明真正的懂了。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...