GenweiWu / Blog

个人技术能力提升
MIT License
4 stars 0 forks source link

tcpdump 记一次404问题定位 #54

Closed GenweiWu closed 5 years ago

GenweiWu commented 5 years ago

问题描述

问题其实蛮简单,就是有个rest请求返回404了(请求是https的,其中https是nginx上设置的证书)

当时的请求路径是这样的

nginx --> 网关 --> 组件

关键是还遇到了 本地模拟没出现这个问题,但是对方还是会报这个错的问题 (其实这里踩坑了,因为对方是用java代码请求404,而我本地是postman模拟,实际上请求数据没有统一)

GenweiWu commented 5 years ago

404不一定没请求到服务器

我最初对404的理解就是请求没有到达服务器端,那么对后端的转包这些操作就没意义;

但是,404不一定是真正的404

后台服务器接受服务后,也可以人为的返回404给前台,想返回啥都可以

GenweiWu commented 5 years ago

https的抓包

后来我们看了日志发现在网关那里会报错,说明请求到了后台。 于是我们想抓个包看看,但是https抓包看不到请求的内容的。 根据上面提到的请求路径,其实还有两个请求路径可以构造:

  1. 请求绕过nginx,使用http直接请求网关
  2. 直接请求组件得了

于是我们使用方法1成功的抓到了请求的内容(https想办法转换为http再抓包)然后使用这些内容本地构造请求,发现也出现了404的问题 (这个坑就是两者数据不一样导致一开始问题没有复现)

GenweiWu commented 5 years ago

抓包将对方的java请求内容替换为postman模拟请求

此时问题就好定位了。

结果是zuul超时会返回404,果然坑呀