0.19 一次网页请求的完整旅程
第〇篇【零基础预科】免费。这一篇把前几篇串起来,看清"按下回车到页面出现"之间到底发生了什么。
一、完整链路总览
你可能会问:这么一大圈跑下来,到底要花多久?通常是几百毫秒到一两秒——DNS 查一次有缓存、TCP 握手几个往返、TLS 握手又几个、再真正传 HTML,然后 CSS、JS、图片这些子资源往往还要再发几十个请求。你感觉"点一下就出来了",其实是这一串环环相扣的小动作刚好跑完了。哪一环慢了,页面就卡在哪一步:DNS 慢就是白屏半天,TCP 连得上但 HTML 传得慢,就一直转圈。
二、逐步说明
- DNS 解析:把 gysec.top 变成 IP(0.17);
- 建立连接:浏览器和服务器在 443 端口建立 TCP 连接(0.16);
- TLS 握手:HTTPS 下双方验证证书、协商加密密钥,之后通信加密;
这里多说一句 TLS 握手:它不只是"加密",还包括浏览器要检查服务器的证书是不是真的、有没有过期、是不是受信任机构签的。证书一旦对不上,浏览器就会弹出"您的连接不是私密连接"那种红色警告——这就是 0.17 说的"假站拿不到真证书"在起作用。很多新手一看警告就手痒点"继续前往",而这一步恰恰是安全上的重要关口。 4. 发送请求:浏览器发出 HTTP 请求,包含请求方法、路径、请求头(Cookie、UA 等);
请求头里那几样先有个印象:Cookie 是服务器之前塞给浏览器的小纸条,之后每次请求都会自动带上,服务器靠它认人——你登录后过一会儿再刷新还保持着登录态,靠的就是它;User-Agent(UA)是浏览器自报家门,告诉服务器"我是 Chrome、还是微信内置浏览器"。很多防护和绕过,恰恰就在这些不起眼的请求头上做文章。 5. 服务器处理并响应:Web 服务器/后端处理,返回状态码和内容;
服务器内部这一步,预科阶段你不用钻太深——它可能查数据库、调内部接口,再把结果拼成 HTML。你只要知道:从"浏览器发出请求"到"服务器回内容"中间,还隔着这么一层处理,而很多漏洞(SQL 注入、命令注入)就发生在这层处理上,这也是为什么前面几篇反复让你留意参数是怎么被用的。 6. 加载子资源:解析 HTML 时发现 CSS、JS、图片、字体、接口,再分别请求;
这里有个细节:浏览器不是等 HTML 整个下完才动手,而是边收边解析——看到 <img>、<link>、<script> 就立刻并行发新请求去取,所以页面常常是"文字先出来、图片慢慢补"。你一定见过那种先出字、再一点点加载图片的效果,就是这么来的。 7. 渲染:浏览器把 DOM、样式、脚本组合,最终画出页面。
这七步其实不是只走一遍——页面里每一个子资源,都要从"建立连接、发请求、收响应"重走一遍小循环。所以一个复杂页面背后,往往是几十次这样的往返。理解了这条流水线,以后看到"网页慢",你脑子里就能自动拆成"到底是哪一环慢了",而不是干瞪眼。
三、HTTP 状态码速查
| 码 | 含义 | 常见场景 |
|---|---|---|
| 200 | OK 成功 | 正常返回页面 |
| 301/302 | 重定向 | HTTP 跳 HTTPS、旧地址跳新地址 |
| 400 | 请求错误 | 参数格式不对 |
| 401 | 未认证 | 需要登录 |
| 403 | 禁止 | 已登录但无权 / 被拦截 |
| 404 | 未找到 | 地址错误/页面不存在 |
| 500 | 服务器错误 | 后端异常 |
| 502/503/504 | 网关/服务问题 | 上游挂了/超时 |
你之前遇到的"手动输 /login 正常、点击却 404",就是前端路由和服务端路由的差异;而"登录后回原页"则是 302 重定向 + 隐藏跳转参数的配合。
这些状态码不用死记,混个眼熟就行。真正实用的判断是:看到 4xx 多半是你(客户端)的问题——地址错了、没登录、权限不够;看到 5xx 基本是服务器那边炸了,你在客户端再怎么刷新也没用。日常排查"这个页面为什么打不开",第一步就是按 F12 看它到底是 200、404、500,还是请求压根没发出去——状态码直接告诉你锅在谁那边。
四、请求和响应长什么样
请求(简化):
GET /wiki/deser-lazymap HTTP/1.1
Host: gysec.top
Cookie: gysec_auth=xxxx
User-Agent: Mozilla/5.0 ...响应(简化):
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
<!DOCTYPE html> ...请求方法常见:GET(取数据/页面)、POST(提交数据,如登录表单)、PUT/DELETE 等。
最该分清的是 GET 和 POST:GET 是"我要看",参数都拼在 URL 里、会被缓存和记录;POST 是"我要交",数据放在请求正文里,地址栏看不到——你输入密码登录时,浏览器发的就是 POST。为什么登录不用 GET?因为密码绝不能出现在 URL 里、被历史记录和服务器日志留存。这个区别看着小,却是理解后面很多漏洞和越权问题的基础。
五、怎么观察这条链路
- 浏览器按
F12打开开发者工具 → Network(网络) 面板,刷新页面,能看到每一个请求、状态码、请求头、响应; - 命令行可用
curl -I https://gysec.top只看响应头和状态码; - 抓包工具(Wireshark/Burp)能看到更底层或可修改的请求。
第一次打开 F12 的 Network 面板你会愣住:一个页面底下居然挂着几十上百个请求——主文档、样式、脚本、图片、字体,还有各种埋点统计的接口,密密麻麻。红色的就是失败的请求,旁边 Status、Size、Time 三列最有用:Status 看对错、Size 看传了多大、Time 看花了多久。网页卡顿时,往往就是某一个子资源的 Time 特别长——点它一下,就能定位到是哪个图片或脚本拖慢了整页。
六、本篇小结
- 旅程:DNS→TCP→TLS→HTTP 请求→响应→加载子资源→渲染。
- 状态码:200 成功、301/302 跳转、401 未登录、403 禁止、404 没有、500 出错。
- 一个页面背后是很多次请求;用 F12 Network 观察。
- 能把问题定位到"哪一步",是排查和安全测试的关键能力。
下一篇 0.20 讲请求两端的角色:客户端与服务器。