导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:346
阅读量:1541767
访问量:181650
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
博文->>首页 博主的更多博文>>
iOS请求访问文件网关服务图片接口异常问题的解决
Tags : iOS,文件网关,异常发表时间: 2021-08-04 18:33:26
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
比如: 转自:Su的技术博客  原文地址:

1

问题背景

文件网关服务提供访问图片的接口,Android和浏览器访问正常,然而就唯独iOS这边死活访问失败,失败信息如下:

Error Domain=NSURLErrorDomain Code=-999 "已取消" UserInfo={NSErrorFailingURLStringKey=https://service.xxx/link/1202010141537537440000, NSErrorFailingURLKey=https://service.xxx/file-gateway/link/1202010141537537440000, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <59E2FB02-C920-4BD5-8F61-7B2150D154ED>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <59E2FB02-C920-4BD5-8F61-7B2150D154ED>.<1>, NSLocalizedDescription=已取消}



2

定位解决


1)从上面的信息,大概只能看到请求被取消,但是到底是什么原因还是不能确定。

在网上找了大量信息,有的说域名证书问题(运维排除),有的说iOS端处理的问题(iOS排除),等等始终找不到对应我们的问题并能解决。


2)接着以为是iOS对http响应头信息比较严格,跟正常访问图片的地址进行对比,尝试加了响应头字段信息比如:Last-Modified等始终还是一样的问题,没能解决(之前增加之后iOS同事说没问题了,但是现在却不行了??疑惑。)。


3)这个时候就想从http请求入手,跟进下网络请求的具体操作。就让iOS开发同事能不能在客户端那边做debug,或者将请求信息,比如请求头,响应头信息打印出来提供给我这边看下是哪里的问题?


下面是iOS同事提供的请求头信息:

异常请求响应头:


正常请求响应头

显然,我们从异常请求的状态码是406,即为“Not Acceptable”,也就是请求信息不被接受/允许。


接下来就让iOS同事把请求头信息提供下,如下:

于是将其Accept值放到本地postman进行重现,可以重现那么就可以自行在本地环境进行找原因。

可以发现,iOS是要求接受的类型是image/webp和image/*,所以相对就比较严谨,我发现为什么我们浏览器都能正常返回和响应,原因是:

前面的image/X都没有匹配到我们实际的图片资源image/png,所以最终就走了默认*/*,基本上就能正常通过。

回复公众号【资料】获得干货资料集锦:技术ppt、IT大会资料、架构、分布式资料等。


4)接着查看文件网关提供的接口源码

发现Controller上面被@Produces注解, 并且使用MediaType.APPLICATION_JSON,即application/json。所以基本上就知道异常问题的罪魁祸首了吧。


5)解决

去掉Controller上面的@Produces注解,或者在具体的方法上增加注解@Produces("image/*")。




3

总结

1)确定http接口请求接受的类型,即请求头Accept,不能盲目的设置。


2)controller上面尽量少使用@Produces,这种全局配置会将提供的具体接口都统一为一样,而是在具体接口上增加@Produces区分。


3)出现网络请求问题,可以先尝试打印请求头和响应头、响应体信息,看下是否有具体的异常,也不要停留在使用一些依赖组件抛出的问题,比如此次的iOS “code=-999 已取消”(明显,这种异常信息可能没什么用!),最后也许可能需要用到抓包技术来获取具体的报文信息等。

2020记

推荐好文
1、互联网Code Review最佳实践分享
2、dubbo面试题!会这些,说明你看懂了dubbo源码
3、Kafka面试题!掌握它才说明你真正懂Kafka
4、
Netty 5.0为啥被舍弃?原因竟然是...
5、
中台之上——业务架构系列【汇总】
6、必备瑞士军刀IDEA插件,你使用了哪些
7、线上热更新代码只需3步 Arthas实战
8、Eureka源码剖析之七:架构&面试题【总结】
9、互联网工程师应该用这种姿势打印日志

-关注搬运工来架构,与优秀的你一同进步-
打赏
打赏
关注公众号
公众号
类别:线上问题| 阅读(237)| 赞 (21)
上一篇 : 全链路压测之影子库及ShardingSphere实现影子
下一篇: 升级需谨慎,开发两行泪!——记一次MySQL驱动包升级引
评论
暂无评论!
发表评论
昵  称:

验证码:

内  容:

    同时赞一个 赞