callback是OSS的一个重要功能,可以应用在数据同步等多个场景中,在使用过程中难免会遇到一些问题,有些问题通过错误提示比较难以排查。本文针对常见的一些问题详述原因及排查方法。
1、返回的body非json格式
1) 现象
返回以下错误:
2) 原因:
原因可能有两种,如下
A、应用服务器返回给OSS的body的确不是json格式。比如
Resp_body就不是合法的json格式,OSS就会报上述错误。这种一般比较明显,还有比较隐蔽的,比如应用服务器处理过程中抛了异常,导致没有按照预期返回给OSS,而是返回了一些栈信息等,也会导致OSS报上述错误。
B、应用服务器返回给OSS的body中带有bom头。这类错误常见于用php编写的应用服务器中,由于php返回了bom头,导致OSS收到的body中多了三个字节,不符合json格式,因此报上述错误。如果在应用服务器端抓包,可以看到以下信息。
其中ef bb bf这三个字节就是bom头。关于bom头的产生原因以及如何去除bom头的方法,网上有非常多的解释,google即可。
2、错误的status
1) 现象
这是一类错误,有可能是502,或者400等,如下
2) 原因
400或者其他的status比如404/403等是指应用服务器返回给oss的http是400或者404/403等,正常情况下应用服务器必须返回200给OSS。502是由于应用服务器根本就没有起web服务,没有监听OSS发过来的回调请求。
3、超时
1) 现象
2) 原因
出于安全原因,OSS的回调请求只会等待5s钟,如果5s后还是没有返回,那么OSS就会主动断开与应用服务器的连接,并返回客户端这个错误,错误信息中的IP可以忽略。
比较常见的就是上述三种错误,尤以第一种错误的B情况最为隐蔽,如果想定位的话,最直接的方法就是在自己的应用服务器上抓包