云存储时代已经来临,程序员向云端转型是必需的一步。很多程序员同学在论坛中也抱怨OSS用不起来,我看了很多问题,都是一些基本的问题,比如endpoint域名填写不正确、bucket填写错误、object名字填写错误、授权计算错误等等,这些问题原本应该比较容易处理的,由于种种原因,很多人只是把代码贴到论坛上,也讲不出问题的现象,想要帮忙也无从下手,在这里,给大家共享一下我自己的一些方法。
首先介绍下自己的情况,我所在的公司是个创业公司,产品主要解决数据传输过程中的互联网跨国加速和网络QoS保障,因此就要找有大量数据传输交换的领域。2014年12月份开始接触公有云服务,了解到阿里云OSS,于是想看看OSS是否有应用我们传输加速产品的机会。
我是个C/C++程序员,而阿里云OSS并没有C/C++ SDK,因此刚开始学习阿里云OSS 主要靠官方的Http API手册,而在此之前我没有接触WEB和Http协议,入门还是比较吃力。当然,由于我以前的通信行业研发背景,读RFC标准和官方接口文档觉得比较理所当然。我花了2天的时间,一边读接口文档,一边使用官方提供的python osscmd工具尝试走通了所有的接口,同时我使用Wireshark抓了每个OSS操作接口的http报文,观察了OSS Http报文各字段的值设置,这样子OSS入门工作基本完成。
回过头来看这段过程,评心而论,阿里云OSS的文档质量其实还基本合格,每个接口都有提供了实际的http报文样例和详细说明,并没有论坛里很多激烈言论说的那么不堪。当然,大家可能对阿里云期望比较高,也可能很多人对OSS没有深入了解的兴趣,只是为了完成某个任务集成OSS,希望有样例可以拷贝一下、修改一下就可以运行。OSS作为云存储,其技术体系与之前的文件系统存储有较大区别,要入门还是必须先搞清楚一些基本概念才好。
前面介绍了这么多,马上进入正题:
如何使用Wireshark工具协助定位阿里云OSS开发过程的问题。
首先介绍Wireshark,这是一款Windows的开源报文抓取工具,百度一下就可以下载到,使用也全部是图形界面,这里就不再介绍具体使用方法。
然后介绍一下OSS Http接口,阿里云以前提供的是pdf文档,最近网站帮助改版,好像只有html在线版了,
链接地址:
阿里云OSS API手册文档
阿里云OSS所有的操作,最后都体现为客户端与阿里云OSS之间的Http交互,我这里说的操作是指 PutObject/HeadObject等等这些操作,并不特指某个SDK的编程API。
下面是一个Wireshark报文抓取的例子,这个报文包中包含了两个操作,
操作1:通过GET BUCKET获取指定Bucket下面的所有Object列表,这个操作得到了阿里云OSS的成功响应;
操作2:通过HEAD OBJECT获取指定Object的属性信息,这个操作得到了403的失败响应;
操作1请求报文图解
操作1响应报文图解,可以看到返回的是200 OK,这次操作成功了。
]
操作2请求报文图解
操作2响应报文图解,从下文可以看到,这个HEAD OBJECT响应返回了错误码403 Forbidden。
上面抓包注解是我使用C++开发cloudfs过程中的一个实际问题定位抓包。
当时的问题现象是有很多文件(上千个)去做head object操作,只有这个名为 libc++-6.dll文件失败了,通过抓包发现OSS返回的是403 Forbidden,这个响应码一般是指对象不允许访问,大多数时候是OSS没有找到对应的名字的Object。根据这个思路提示,我发现这个“libc++-6.dll”跟其他的文件名不一样的地方是有一个“-”符号,最后百度查找“-”符号,又重新对照OSS API手册,发现object名字是需要UTF-8编码,并且进行URL转义的,修改之后,问题解决。
当然,如果大家用的是阿里云OSS官方已经提供的SDK如Python、Java、.Net等等,像这种问题都不需要大家考虑,SDK内部已经封装好。
但是如果大家在调用官方SDK时,碰到问题通过可以抓包来获取交互的过程和OSS的响应返回,对问题定位的思路调整是很有帮助的;即使自己没有什么想法了,把抓包信息贴在论坛里面,这样别人也可以有更多的信息帮助你。
一点点使用OSS的方法分享,希望能够帮助到想使用OSS云存储却还没有找到方法的程序员同行们。
下面附件是文中用作样例描述的wireshark抓包文件,供对比参考。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。