最近在使用SDWebImage的时候访问Resitify自建的api时候出现了未能加载出图片的问题。使用浏览器打开图片的网址一切正常。
一开始以为是SDWebImage的bug,于是更新SDWebImage到最新版本还是有问题,奇怪的是google了一下,遇到问题的有不少人,但是最后没找到适合自己的答案,于是自己动手,丰衣足食。
出问题的链接:
http://192.168.0.100:3000/uploads/images/1439795883238.jpg
首先排查是否是自己api服务的问题。
于是随便换了图片的链接,一切正常,图片能够正常显示出来!!!
于是基本确定是自己服务器的问题了。
接下来模拟SDWebImage的请求,看服务器返回什么东西。
这个办法有很多,可以通过一些抓包工具抓。我是直接开启服务器的调试,把请求的信息变量req.headers打印了出来。
SDWebImage的请求头信息如下:
{
host: '192.168.0.100:3000',
accept: 'image/*;q=0.8',
'accept-language': 'en-us',
connection: 'keep-alive',
'accept-encoding': 'gzip, deflate',
'user-agent': 'Server/1 CFNetwork/711.4.6 Darwin/14.3.0'
}
初看并没有什么特别的地方,于是把头信息拷贝到postman中
可以看到返回来的错误信息
{
"code": "NotAcceptableError",
"message": "Server accepts: application/json,text/plain,application/octet-stream,application/javascript"
}
看到这个信息基本上可以确定问题的所在了。
原来restify默认情况下不支持图片类型的mime头(image/*)
于是经过查找restify的文档把mime类型image/*加上即可。
之前使用浏览器能打开是因为浏览器默认的请求里面有restify接受的mime类型。
以下是chorme浏览器的请求信息。