浏览器输入url后发生了什么
你按下回车的浏览那一刻,浏览器其实先干了一件特别“笨”的器输事——它得先弄清楚,你敲下的浏览 浏览器会先翻自己的器输缓存,没找到就去问操作系统,浏览操作系统也没有,器输就只好去问专门管这事儿的浏览DNS服务器。这一路问下来,器输运气好几十毫秒,浏览运气不好碰上DNS服务器抽风,你能明显感觉页面卡了一下——那种“转圈圈”的焦躁,多半就是卡在这一步。 拿到IP地址后,浏览器开始跟那台服务器“握手”。用的是TCP协议,得先来一次“三次握手”:浏览器说“嘿,在吗?”服务器回“在呢,你呢?”浏览器再回“我也在,咱们开始吧。”这来回三句话,听起来有点傻,但少了任何一句,数据就没法可靠地传。要是你访问的是https开头的网站,还得额外多握几次手——这次是为了加密,确保你输入密码时没人偷看。所以你会发现,https网站打开总是比http慢那么一丁点,这就是代价。 连接建好了,浏览器立马甩出一个HTTP请求。这个请求长什么样?大致是“GET / HTTP/1.1”加上一堆头信息,告诉服务器“我要看你的首页,我支持什么格式,我用的什么浏览器”。服务器收到后,得去查这个路径对应的文件——可能是静态的HTML,也可能是后台程序动态生成的页面。如果服务器忙不过来,它会回你一个“503 Service Unavailable”,那意思就是“我累瘫了,你等会儿再来”。 服务器返回的响应里,第一行是状态码。200代表一切正常,301是跳转,404就是你找的东西不存在,500是服务器自己炸了。我见过最坑的是200配一个空页面——服务器说“我这儿有内容”,结果啥也没给,这比404还让人抓狂。 浏览器拿到HTML后,开始“画”页面。它一边解析HTML标签,一边构建DOM树,碰到 等所有资源都到位,页面就显示出来了。但别急着关——浏览器还会继续跑一些“后手活”。比如它会主动跟服务器保持一个长连接,方便你点下一个链接时不用重新握手。它会预解析你鼠标悬停的链接,提前把那些页面的DNS解析好。这些优化你看不见,但确实让每一次点击都更快了那么几毫秒。 整个过程,从你按下回车到页面完整呈现,通常不到一秒。但这一秒里挤满了十几个步骤,任何一个环节出问题,你看到的就是一个错误页或者无尽的加载条。下次再遇到网页打不开,别急着骂网速,先想想是DNS挂了,还是TCP被墙了,又或者是服务器自己闹脾气了——毕竟,这链条上每一环都可能掉链子。www.example.com 到底住在哪台服务器上。这就像你给朋友寄信,器输信封上光写“张三收”没用,浏览得先查通讯录找到他的器输门牌号。这个“门牌号”就是浏览IP地址,而查通讯录的器输动作,叫DNS解析。浏览<link> 或 <script> 标签,又得发新的请求去拉CSS和JS文件。这里有个细节:如果CSS没加载完,浏览器通常会阻塞渲染,因为它不想让你先看到没样式的裸内容。但JS就随性多了,有些放在底部的脚本会等页面差不多画完才执行——这也是为什么老派开发者总劝你把script标签放在body末尾。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-