从点击到呈现 — 详解一次HTTP请求(1)

其实想这个内容很久了,一方面是回顾自己所学的 http 知识,另外一方面也是分享吧,因为目前为止没有看到网络上有类似我想写的东西。

一般来说,很多的参考资料上面都会说,http 是一个基于请求/响应的工作模式,然后画出一张浏览器和服务器的 b/s 结构图,再画上两个箭头,表示请求和响应,应该说这么解释是易懂的,一般也是够清楚的,但是对于像我这样的考据癖来说,这么简单的解释显然是不够的,在我们点击一个网址,到它能够呈现在浏览器中,展示在我们面前,这个过程中,电脑里,网络上,究竟发生了什么事情,其实是很有意思的,也是值得去探究的。

于是我想要按照自己的理解把这个过程尽可能详细的剖析出来,在行文上我打算按照时间线的方式,这样又好写,也好读,好理解。这应该会写成一个系列,刚好最近开始在看很多人都在推荐的热门书,http 权威指南,这本,http://book.douban.com/subject…,跟我想要说的差不多的,于是就一边当作是读书笔记吧

那我们就开始了,故事其实并不是从在浏览器的地址栏输入一个网址,或者我们抓着鼠标点击一个链接开始,事情的开端要追溯到服务器启动监听服务的时候,在某个未知的时刻,一台机房里普普通通的刀片服务器,加上电,启动了操作系统,随着操作系统的就绪,服务器启动了 http 服务进程,这个 http 服务的守护进程,(daemon),可能是 apache,也可能是 nginx,不管怎么说,这个 http 服务进程开始定位到服务器上的 www 文件夹,一般是位于 /var/www ,然后启动了一些附属的模块,例如 php,或者,使用 fastcgi 方式连接到 php 的 fpm 管理进程,然后,向操作系统申请了一个 tcp 连接,然后绑定在了 80 端口,调用了 accept 函数,开始了默默的监听,监听着可能来自位于地球任何一个地方的请求,随时准备做出响应。

这个时候,典型的情况下,机房里面应该还有一个数据库服务器,或许,还有一台缓存服务器,如果对于流量巨大的网站,那么动态脚本的解释器可能还有单独的物理机器来跑,如果是中小的站点,那么,上述的各色服务,甚至都可能在一台物理机上,这些服务监听之间的关系,可以参考这里,再搭一次 Apache PHP MySQL 环境,不管怎么说,他们做好了准备,静候差遣。

Leave a Reply

Your email address will not be published. Required fields are marked *