一个页面(www.melody.com/index.php)的请求过程

  很早之前就想写一篇关于页面请求整个过程的文章。当然,这样的文章网上到处都是。而且自己写的并没有比别人好,那为什么还要写那。

  人都是善忘的动物,写下来主要是作为备忘,同时锻炼下自己的表达能力。毕竟能把一个问题讲明白才能说明真正的懂了。

      1. 首先,在浏览器输入网址(www.melody.com/index.php)

  2. 浏览器查找该域名对应的 IP 地址(DNS 解析)

   DNS 解析过程:

    (1) 浏览器缓存 - 浏览器会缓存 DNS记录一段时间,俺电脑上的谷歌浏览器默认是1分钟。

    (2) hosts 文件 - 不同系统放置的目录不一样,Mac 是在 /etc/hosts.

    (3) 路由器缓存 - 额,这个就没什么好说的了。

    (4) ISP 解析服务器 - 其实这个是 DNS记录的缓存。

    (5) 递归查询 - 这个过程详细可以google。这个查询是由 ISP 的解析服务器发起的,所以查到后,ISP 会将记录缓存后发送给浏览器。

   DNS 查找的过程就这样完成了, 假设查询到的 IP 地址为 115.26.23.117。值得注意的是(4)中,一般默认是运营商解析服务器。比如笔者用的是联通的宽带,默认的就是联通的解析服务器。linux/mac 可以通过 cat /etc/resolv.conf 查看。

  3. 浏览器发起到115.26.23.117端口80的连接

    TCP 连接建立需要经历三次握手(SYN -> SYN+ACK -> ACK)

  4. 浏览器给Web服务器发送一个HTTP请求

    

    详细的报文分析可以参考《HTTP权威指南》,这里不做赘述。

  5. 服务器接收请求

    

    如图1,实际上是Nginx 接收了请求。

  6. 服务器"处理"请求

    如图1,请求经Nginx 转发给App Server 进行处理。

    请求处理就是一个能够读懂请求并且能够生成HTML来进行响应的程序(像Python、PHP、Ruby)。

  7. 服务器返回一个HTML响应

    APP Server 生成一个HTML响应经Nginx 返回给浏览器。

  8. 浏览器开始显示HTML

    在浏览器没有完整接受全部HTML文档时,就开始显示页面了。 

    浏览器会根据响应报头的信息来决定如何解释该响应。

  9. 浏览器获取嵌入在HTML中的对象(css、js、img等) 

    如:<link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=TcLu_VRYP-hjFEuOQ-7LRL7nW7QGyV_7JTjhUjBtzsY1">

  总结一下:

    1. 加深下记忆

    2. 参考: http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html

 

   

 

posted @ 2016-09-09 15:57  melody_lql  阅读(1190)  评论(0编辑  收藏  举报