LabHub
学习 学习路径 课程

网络排障

用 curl 诊断 HTTP

在 LabHub 中继续学习

目标

使用 curl 提取状态码、请求头、重定向、虚拟主机和计时信息,练习将“很慢”和“不可用”转换为具体区段的名称。

为什么重要

curl -w 的计时字段将一次请求拆分为名称解析 / TCP 连接 / TLS / 首字节 / 总耗时五个区段。有了这种拆分,就能把“API 很慢”这类报告改写成“TLS 握手耗时 800ms”,相关团队和措施也会在这一刻确定下来。--resolve-H 'Host:' 是部署前验证的必备工具——在更改 DNS 之前,可以用真实名称测试新服务器;直接访问负载均衡器后的后端时,也能让虚拟主机路由保持原样。

步骤

  1. 创建 /root/http 目录,并在后台使用端口 8088启动 /opt/fixtures/nt-http/server.py。评分时该进程也必须保持运行。
  2. 以详细模式请求 http://127.0.0.1:8088/ok,并将包含请求头和响应头的完整输出保存到 /root/http/verbose.txt
  3. /ok/notfound/teapot/redirect 四个路径的状态码,按每行 경로 코드 的格式写入 /root/http/status.txt。(不要跟随重定向)
  4. /ok响应头部分保存到 /root/http/headers.txt。其中必须包含 X-Labhub-Node 请求头。
  5. 跟随重定向请求 /chain,并将最终状态码和重定向次数以一行 code=<코드> redirects=<횟수> 写入 /root/http/redirect.txt
  6. 添加 Host: shop.labhub.local 请求头来请求 /whoami,并将响应正文保存到 /root/http/host.txt
  7. 使用 --resolve,成功请求 http://shop.labhub.local:8088/ok,同时不修改 /etc/hosts,并将响应正文保存到 /root/http/resolve.txt
  8. 按以下 4 行创建 /root/http/timing.txt。值必须是请求 /slow 路径得到的实际测量值。 code=<상태코드> / connect=<time_connect> / ttfb=<time_starttransfer> / total=<time_total> /slow 有 1.2 秒延迟,因此 total 必须大于或等于 1。

参考

启动诊断服务器

创建 /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 路径会故意缓慢响应。