用 curl 诊断 HTTP
目标
使用 curl 提取状态码、请求头、重定向、虚拟主机和计时信息,练习将“很慢”和“不可用”转换为具体区段的名称。
为什么重要
curl -w 的计时字段将一次请求拆分为名称解析 / TCP 连接 / TLS / 首字节 / 总耗时五个区段。有了这种拆分,就能把“API 很慢”这类报告改写成“TLS 握手耗时 800ms”,相关团队和措施也会在这一刻确定下来。--resolve 和 -H 'Host:' 是部署前验证的必备工具——在更改 DNS 之前,可以用真实名称测试新服务器;直接访问负载均衡器后的后端时,也能让虚拟主机路由保持原样。
步骤
- 创建
/root/http目录,并在后台使用端口 8088启动/opt/fixtures/nt-http/server.py。评分时该进程也必须保持运行。 - 以详细模式请求
http://127.0.0.1:8088/ok,并将包含请求头和响应头的完整输出保存到/root/http/verbose.txt。 - 将
/ok、/notfound、/teapot、/redirect四个路径的状态码,按每行경로 코드的格式写入/root/http/status.txt。(不要跟随重定向) - 将
/ok的响应头部分保存到/root/http/headers.txt。其中必须包含X-Labhub-Node请求头。 - 跟随重定向请求
/chain,并将最终状态码和重定向次数以一行code=<코드> redirects=<횟수>写入/root/http/redirect.txt。 - 添加
Host: shop.labhub.local请求头来请求/whoami,并将响应正文保存到/root/http/host.txt。 - 使用
--resolve,成功请求http://shop.labhub.local:8088/ok,同时不修改/etc/hosts,并将响应正文保存到/root/http/resolve.txt。 - 按以下 4 行创建
/root/http/timing.txt。值必须是请求/slow路径得到的实际测量值。code=<상태코드>/connect=<time_connect>/ttfb=<time_starttransfer>/total=<time_total>/slow有 1.2 秒延迟,因此total必须大于或等于 1。
参考
- 使用
curl -o /dev/null -s -w '%{http_code}\n' <URL>仅提取状态码。 - 如果只想查看请求头,使用
curl -sD - -o /dev/null <URL>更安全。-I会发送 HEAD,因此结果可能随服务器实现而变化。 - 格式为
--resolve <이름>:<포트>:<IP>。 - 常见错误 1:在第 3 步跟随重定向会使
/redirect显示为 200。请去掉-L。 - 常见错误 2:第 2 步中的
-v输出到标准错误,因此仅使用>无法保存。
启动诊断服务器
创建 /root/http 目录,并在后台使用端口 8088启动 /opt/fixtures/nt-http/server.py。评分时该进程也必须保持运行。
夹具服务器将端口作为参数接收。启动后,请使用 ss 确认正在监听。
查看完整的请求头和响应头
以详细模式请求 http://127.0.0.1:8088/ok,并将包含请求头和响应头的完整输出保存到 /root/http/verbose.txt。
curl 的详细模式会输出到标准错误。要保存到文件,必须同时使用重定向。
各路径状态码表
将 /ok、/notfound、/teapot、/redirect 四个路径的状态码,按每行 경로 코드 的格式写入 /root/http/status.txt。(不要跟随重定向)
可以使用输出格式指定器只提取状态码。丢弃正文,只保留状态码。
仅提取响应头
将 /ok 的响应头部分保存到 /root/http/headers.txt。其中必须包含 X-Labhub-Node 请求头。
将用于把请求头转储到标准输出的选项与丢弃正文的选项组合起来,就能在保持 GET 方法的同时只查看请求头。
跟随重定向
跟随重定向请求 /chain,并将最终状态码和重定向次数以一行 code=<코드> redirects=<횟수> 写入 /root/http/redirect.txt。
有一个用于跟随重定向的选项,也有一个用于告知跟随次数的输出变量。
使用 Host 请求头测试虚拟主机
添加 Host: shop.labhub.local 请求头来请求 /whoami,并将响应正文保存到 /root/http/host.txt。
夹具服务器的 /whoami 会原样返回收到的 Host 请求头。
不使用 DNS 按名称连接
使用 --resolve,成功请求 http://shop.labhub.local:8088/ok,同时不修改 /etc/hosts,并将响应正文保存到 /root/http/resolve.txt。
--resolve 将名称:端口:地址三个值用冒号连接起来。不修改 /etc/hosts 也可以实现。
拆分计时并生成报告
按以下 4 行创建 /root/http/timing.txt。值必须是请求 /slow 路径得到的实际测量值。
code=<상태코드> / connect=<time_connect> / ttfb=<time_starttransfer> / total=<time_total>
/slow 有 1.2 秒延迟,因此 total 必须大于或等于 1。
计时字段是累计值。/slow 路径会故意缓慢响应。