web工作原理图
你在浏览器地址栏敲下“www.example.com”并按下回车,作原到页面出现在屏幕上,理图中间隔了不到一秒。作原这一秒里发生的理图事,比你在早高峰地铁里换乘三次还要复杂。作原我试着把这张图拆开给你看。理图
第一步是作原域名解析。别被“解析”这个词唬住,理图说白了就是作原查电话簿。你的理图电脑不知道“example.com”在哪台服务器上,它得去问DNS(域名系统)——互联网的作原通讯录。这台“通讯录”服务器告诉你:这个域名对应的理图IP地址是93.184.216.34。就像你拨114查号台,作原拿到号码,理图然后拨过去。作原这个查询过程有缓存机制,你的电脑、路由器、本地运营商都可能存了上次查过的记录,所以不一定每次都真的打到根服务器去。
拿到IP后,你的浏览器发起一个HTTP请求。注意,这时候它还没把“网页”当回事,它只是按照HTTP协议,组装了一个文本格式的请求包,里面写着“GET / HTTP/1.1”加上一堆头部信息。这个包通过TCP三次握手建立连接,然后被拆成更小的数据包,经过你家的路由器、小区网关、城市骨干网、跨海光缆,一路跳到目标服务器。中间经过的每个节点都是路由器,它们只看包上的目标IP,然后决定往哪个端口转发。这个过程叫路由选择,有点像快递分拣中心——每个中转站不关心包裹内容,只看面单上的地址。
服务器收到请求后,它得搞清楚你要什么。如果这是个静态网站,服务器直接在磁盘上找到index.html文件,读出来,加上响应头(状态码200,Content-Type: text/html等),原样返回。但今天大部分网站是动态的——服务器会先跑一段代码(比如PHP、Python、Java),这段代码可能去查询数据库,把用户信息、文章列表等数据取出来,再拼接到HTML模板里,生成一个完整的HTML文档。这个拼接过程叫服务端渲染。举我自己的例子,上次我搭了个博客,服务器收到请求后要从MySQL里抓文章标题和正文,用模板引擎渲染成HTML,再返回给浏览器。整个过程大概耗时80毫秒,其中数据库查询占了60毫秒。
响应包又沿着原路返回,但路径可能不同——互联网的路径是动态的,就像你回家可以走两条路,哪条不堵走哪条。你的浏览器收到HTML后,开始解析。它先读HTML标签,构建DOM树。读到标签引用的CSS文件,就再发请求去拿;读到
