从你想完成的事情开始
以下均为合成练习。展开情境,对照预期结果,再打开工具;输入不会随链接传递。
分别核对预检和实际响应
使用合成JSON材料,只做本地文本推演,不输入账号、令牌或真实Cookie。
模拟输入
{
"origin": "https://app.example",
"method": "POST",
"credentials": "omit",
"requestHeaders": [
"X-Demo"
],
"preflight": {
"status": 204,
"headers": "Access-Control-Allow-Origin: https://app.example\nAccess-Control-Allow-Methods: POST\nAccess-Control-Allow-Headers: X-Demo"
},
"response": {
"status": 200,
"headers": "Access-Control-Allow-Origin: https://app.example\nAccess-Control-Expose-Headers: X-Demo-Result\nX-Demo-Result: synthetic"
},
"readHeaders": [
"X-Demo-Result"
]
}预期观察
预检与实际响应的所填条件满足支持子集,x-demo-result按输入可见;仍需在目标浏览器取实际证据。
失败时怎么办
{"origin":JSON不完整时保留原文,按输入契约修正;省略实际响应时结果为未知,不能用预检成功代替实际响应。
怎样算完成这一步
能分别记录OPTIONS和实际响应及头可见性;条件推演不代表接口授权、真实请求或业务通过。
按明确单位核对事件时间
选择Unix秒模式;使用合成事件时间,不读取真实日志。
模拟输入
1700000000.5
预期观察
UTC为2023-11-14T22:13:20.500Z;本地显示标明浏览器时区,原始秒的小数保留至毫秒。
失败时怎么办
1e3
拒绝指数写法;先取得原记录单位与时区,不凭位数推断。
怎样算完成这一步
保留原时间、单位和UTC对照,不能仅凭时间接近认定为同一事件。
核对定时字段与执行边界
使用Cronie五字段合成表达式,不创建定时任务。
模拟输入
0 9 * * 1-5
预期观察
分钟匹配0、小时匹配9、星期匹配1至5;日期规则及调度器时区需核对。
失败时怎么办
*/0 * * * *
零步长必须拒绝,按实际意图填写正整数后再解释;不把字段解释当成任务已执行。
怎样算完成这一步
记录方言、时区与目标调度器的实际观察,失败或重复执行保留待查。
解码载荷后核对认证边界
只使用虚构 token;header/payload 为可解析数据,签名段是无效示例,不填生产令牌。
模拟输入
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJleGFtcGxlLXVzZXIiLCJleHAiOjB9.c3ludGhldGlj
预期观察
看到 alg=HS256、sub=example-user 与 exp=0;结果注明未验证签名。exp=0 是已过去的 Unix 时间,这个样例仍能解码,不能用解码成功批准登录或授权。
失败时怎么办
not-a-jwt
非三段、非对象或非法编码无法解码,先核对原始文本。认证需在实际服务中验证签名、发行者、受众和时效;不要修改载荷来获得权限。
怎样算完成这一步
能指出载荷中的主体与时间,并保留“未验证签名”的说明;如要判断访问权限,回到实际认证服务验证。本工具只完成载荷审读。
区分基础结构检查与完整接口验证
使用虚构 OpenAPI 3.1 JSON;工具只核对 openapi、info 与 paths 的基础字段,不执行接口。
模拟输入
{
"openapi": "3.1.0",
"info": {
"title": "Example API",
"version": "1.0.0"
},
"paths": {
"/health": {
"get": {
"responses": {
"200": {
"description": "OK"
}
}
}
}
}
}预期观察
validBasicStructure 为 true,issues 为空;只表示本工具的基础字段检查通过,不验证完整规范、引用、业务授权或接口实际响应。
失败时怎么办
{"openapi":"3.1.0","info":{"title":"Example API","version":"1.0.0"}}缺少 paths 的失败样例可解析,但 validBasicStructure 为 false 且 issues 包含“缺少 paths”。按真实接口定义补齐后复查;不要仅加空字段就认定接口正确。
怎样算完成这一步
核对基础检查结果与问题列表,再在自己的规范校验和接口测试流程中验证操作、参数、响应与授权。
保留表格编号与空值
使用虚构表格;填入练习会选择 CSV → JSON。
模拟输入
sku,enabled,note 001,true, 002,false,说明
预期观察
两条记录;sku 保留字符串 "001",enabled 为字符串 "true",note 为空字符串。
失败时怎么办
sku,enabled 001,true,extra
字段数不一致时回到来源核对分隔符,不直接删除多出的值。
怎样算完成这一步
核对编号、行数和类型,按下游契约决定是否接受空字符串;下载后再核对一条记录。
核对 YAML 配置的数据类型
仅使用模拟配置;填入练习会选择 YAML → JSON。
模拟输入
name: demo id: "001" enabled: true rate: 0.10
预期观察
id 保留字符串 "001",enabled 为布尔值,rate 为数值 0.1;数字尾零不保留。
失败时怎么办
name: demo name: other
重复键无法表达唯一配置,先确认应保留的字段,不能随意删除一个值。
怎样算完成这一步
对照配置契约确认字符串、布尔值与数值类型,保留原始含注释文件用于后续维护。
把请求样例转成客户端代码
选好目标语言;仅使用下方虚构请求,不填生产认证。
模拟输入
curl https://example.com/items -H 'Content-Type: application/json' --data-raw '{"name":"demo"}'预期观察
得到 POST 草稿、application/json 请求头与 name=demo 的 JSON 请求体。本站不会执行请求。
失败时怎么办
curl https://example.com/items -X GET -d name=demo
失败样例为 GET 携带请求体。先核对接口契约;若服务确实要求 POST,再修改方法。不能为消除报错任意改方法。
怎样算完成这一步
核对方法、URL、Content-Type、请求体与目标语言;保存草稿,并写下认证与运行环境待复查项。接口是否成功仍需在自己的环境验证。
找出响应字段的变化
准备相同业务条件下的两份已脱敏响应;本练习固定数组顺序。
模拟输入
{"status":"pending","count":2}修改后:
{"status":"ready","count":"2"}预期观察
status 从 pending 变为 ready;count 从数值 2 变为字符串 2。相同显示字符不代表相同类型。
失败时怎么办
{"status":不完整 JSON 无法进行结构对比。先补全格式;不能把解析失败当作没有差异。
怎样算完成这一步
能指出两处变化,并在自己的接口契约中确认 count 应为哪种类型;按契约修正一侧后重新比较。差异消失不代表接口整体正确。
整理一次超时的已知与未知
记录客户端、操作时间及时区、超时阈值;没有收到响应时保留“未知”。
模拟输入
模拟记录 A:同一客户端 GET /health,200,150ms。 模拟记录 B:GET /items,客户端等待 3000ms 后中止,未取得 HTTP 状态。 服务端是否完成 B:未知。
预期观察
A 是对照观察;B 是客户端中止。不能据此写成服务返回 504 或数据库故障。
失败时怎么办
仅有“页面很慢”,没有时间、阈值或是否收到响应的记录。
先补时间、客户端阈值和是否收到响应。无法补充时保留未知;可能有副作用的操作不要盲目重试。
怎样算完成这一步
形成包含对照、失败条件、未知项和同条件复查步骤的记录;这一步完成的是取证,不是根因诊断。
填写这次排查记录