手账正文
看到 200 Connection established,为什么网页还打不开?
日志明明写着 200 Connection established,网页却还是打不开。这个 200 很容易误导人:它常常是代理在说“通道建好了”,不是网站在说“页面已经返回”。
可以想成先打通电话,再开始办事
通过 HTTP 代理访问 HTTPS 网站时,应用先请代理建立一条通道。通道成功后,还要和网站建立加密连接、检查证书,再发送网页请求。
前面一步成功,后面仍然可能失败。代理答复 200,网站再返回 403,这两条结果可以同时存在,并不矛盾。
看错误发生在 200 之后的哪一步
如果紧接着出现证书问题,先查时间、域名和信任设置;如果等不到网站响应,继续检查目标与连接路径;如果网站已经返回 403、404 或 5xx,就按目标状态继续判断。
不要把看到的第一个 200 当成整次请求完成。
使用 curl 时,区分几种结果
curl 可以分别显示代理建立通道的回应和目标 HTTP 回应。没有收到目标状态时,相关输出可能显示为 000,它不是网站真的返回了“000 错误”。
还要看命令退出码和错误原文。某些命令即使收到了 4xx、5xx,也未必默认按执行失败返回,不能只看命令有没有结束。
普通用户留下这些信息就够用
记录客户端端口、目标域名、出现 200 后的下一条错误和时间。把代理凭据、订阅参数及私人请求内容遮住,再交给维护者。
先确定通道之后哪一步没完成,比重复换节点或关闭证书验证更有效。日志里的成功需要放回它所属的阶段理解。
评论