最新消息:阿里云双12优惠,史上最低折扣。

利用nc直观理解阿里云OSS存储服务

云服务器 aliyun 220浏览

阿里云ECSCentos7安装Flarum

简介: 由于新颖的界面设计实用的站点功能Flarum越来越多的吸引了很多php爱好者  今天我就来说下如何在centos 7 系统上安装Flarum。  1、纯净的系统环 … 阿里云ECS Centos7安装Flarum

1、本教程包括以下内容:

利用nc在OSS上创建一个新文件 利用nc获取OSS上的文件 利用nc复制OSS上的文件 利用nc删除OSS上的文件 利用nc对进行OSS使用过程中相关trouble shooting

2、在开始本教程前,您需要准备以下环境:

阿里云liunx ECS或者可以联网的任意Linux机器 已开通阿里云OSS服务;并已创建Bucket Bucket设置为公共读写(这样是为了演示方便,设置成私有或公共读也可以;但需要签名)。

3、利用nc 从HTTP连接角度体验阿里云OSS

3.1、在OSS上创建一个新文件

用HTTP PUT 方法在OSS上创建一个新文件,先创建一个空文件吧
先根据OSS Restful API 把HTTP 请求构造出来,注意下面content-length 设置为0,这样就可以创建一个空文件

PUT /empty_file HTTP/1.1 Content-Length: 0 Host: bucket-example.oss-cn-qingdao.aliyuncs.com

利用nc 与oss 服务器80端口建立一条tcp链接

nc bucket-example.oss-cn-qingdao.aliyuncs.com 80

看结果,OSS 返回200 Ok,请求成功,注意下面的Etag,正好是一个空文件的md5,这样,一个空文件就创建成功了,可以去控制台上看看是否真的有。

接下来创建一个有内容的文件吧,把上面PUT 请求HTTP 头部的content-length 改成10试试。

按理现在我们在OSS上已经创建一个内容为”Hello, World.“, 是否创建成功并且内容真的是”Hello, World. “接下来再利利用nc 体验下GET 请求吧。

3.2、获取 OSS 上的文件

首先还是构造GET 请求的HTTP 头部

GET /empty_file HTTP/1.1 Host: bucket-example.oss-cn-qingdao.aliyuncs.com

我们先获取3.1 中创建的空文件,200 Ok,Content-Length为0, 说明文件存在而且内容确实为空

再获取下刚刚的创建的内容为”Hello, World.” 的文件(见下图),但是为什么GET 下来内容是”Hello,Wor”?
再看下3.1 节PUT 时候的Content-Length长度为10, 而”Hello, World.”长度超过10,对于多出来的数据OSS会做截断处理,如果是Keeplive连接超出Content-Length的数据会理解成下一个HTTP请求数据。

3.3、复制OSS上的文件

根据OSS Restful API 构造Copy 请求,其实就是PUT 请求加上x-oss-copy-source 头部指定Copy 源文件位置

PUT /oss_file_copy HTTP/1.1 Host: bucket-example.oss-cn-qingdao.aliyuncs.com x-oss-copy-source: /bucket-example/oss_file

执行过程及结果结果如下图,如果源和目的为同一个文件可通过更改头部更改ObjectMeta,可以尝试用一些错误的头部测试OSS的行为。现在你的bucket 下通过copy 多出来一个oss_file_copy 文件。

3.4、删除OSS上的文件

Delete 请求HTTP 头部

DELETE /oss_file HTTP/1.1 Host: bucket-example.oss-cn-qingdao.aliyuncs.com

执行过程及结果如下图,现在OSS 上bucket-example 下的oss_file文件已经被删除了

4、利用nc 对进行OSS使用过程中相关trouble shooting

4.1、调试cors 请求

跨域这个东西做前端的同学遇到的应该比较多,使用OSS过程中出现浏览器向OSS发送跨域请求出问题时第一反应是”怪罪“OSS,其实不一定是OSS的问题,有可能是浏览器根本就没把请求发出去等等原因…….
下面我们就来利用nc测试下当跨域请求出问题的时候是否是OSS问题。

4.1.1、构造跨域请求(OPTIONS)

OPTIONS /fs/static/axe/resaxe/css/loading.css HTTP/1.1 Host:dbk-file-1.oss-cn-beijing.aliyuncs.com Access-Control-Request-Method: POST Access-Control-Request-Headers: accept, content-type Origin: https://fs.dongboke.com

将此请求发送给OSS,OSS返回结果是403 Forbidden,如下图
看到错误提示”CORSResponse: CORS is not enabled for this bucket.“

4.1.2、设置OSS Bucket Cors

去控制台上对bucket-example 设置cors
登陆OSS管理控制台,点进bucket-example->bucket 属性->Cors设置->添加规则

4.1.3、验证结果

再将此OPTIONS 请求发送给OSS,请求成功

4.2、利用nc replay OSS 请求

4.1、背景

在学习及使用OSS的过程中肯定会遇到很多问题,而这些问题必须通过抓包来查出问题,看看HTTP 请求到底把什么数据发出去了又收到了什么样的数据,而很多在线上使用的bucket权限是不能够设置为public-read-write 的,因此在构造请求头部的时候需要签名,这就大大加大了OSS HTTP请求头部构造难度,因此我们可以利用nc 及 wireshark 来对HTTP请求进行重放,OSS 签名在15分钟内有效,因此在15分钟内都可以对请求进行重放,甚至可以利用此点清空object内数据。

4.2、wireshark 抓包

为了便于演示这里用osscmd(可取官网下载)发送带OSS签名的请求,同时启动wireshark抓包

osscmd put file oss://my-data-store

过滤HTTP 请求包,也就是dst port 80 的包,点击并单击中右键->Follow TCP Stream

可以清晰看到请求头部及数据

4.3、将头部数据复制出来利用nc进行重放

将头部复制出来

PUT /file HTTP/1.1 Host: my-data-store.oss.aliyuncs.com Accept-Encoding: identity Content-Length: 25 User-Agent: aliyun-sdk-python/0.4.0 (Linux/3.2.0-87-generic-pae/i686;2.7.3) Host: my-data-store.oss.aliyuncs.com Expect: 100-Continue Date: Fri, 04 Mar 2016 12:33:28 GMT Content-Type: application/octet-stream Authorization: OSS V7lMNqSkExeEsh0Z:QsfZOMIPjy2+eqmiPVtYsnK3JrU=

进行重放,成功

4.4、试试改改Content-Length

content-length 可以改成任意合法值,我们就可以更改object内数据了
我们来试试将content-length 改成0,清空object内数据试试

注意content-length,和Etag,content-length我们改成0, OSS返回的Etag 是空文件的md5
清空object内数据成功。

5、总结

以上几个例子通过nc 与OSS 服务器建立连接后输入HTTP请求数据直观感受OSS对外提供的功能,当然OSS提供的功能还远远不止这么多,还有其他很多很赞的功能都是以HTTP 形式对外提供,可以根据官方提供的API文档构造出HTTP请求头部用上述同样方法与OSS交互,nc 会打印出TCP连接上所有HTTP数据,直观理解OSS。通过nc 与 wireshark配合重放OSS 请求去重现问题并进行相关trouble shooting。

转载请注明:小猪云服务器租用推荐 » 利用nc直观理解阿里云OSS存储服务