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

1、本文要说什么

利用nc 直接与阿里云OSS服务器建立TCP 连接,通过输入HTTP 请求头部及数据与OSS进行交互,以此理解阿里云OSS服务的本质及使用阿里云OSS过程中的一些trouble shooting。

2、相关准备工作

一台连上互联网的Linux主机(如果没有可以购买一台阿里云ECS),注册并开通阿里云OSS服务(oss.aliyun.com)并创建一个bucket,本文以青岛的bucket:bucket-example(bucket-example.oss-cn-qingdao.aliyuncs.com) 为例进行一系列操作,为了简化演示步骤将bucket设置为public-read-write 公开读写,这样可以忽略签名。OSS 相关文档见oss.aliyun.com。

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: http://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。

时间: 2024-08-02 18:08:57

利用nc 直观理解阿里云OSS 存储服务的相关文章

阿里云对象存储服务OSS 学习笔记

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务 OSS服务先使用后付费 可以使用阿里云提供的API/SDK接口或者OSS迁移工具轻松地将海量数据移入或移出阿里云OSS.阿里云OSS服务的三种类型:1.标准类型(Standard):移动应用.大型网站.图片分享或热点音视频的主要存储方式2.低频访问类型(Infrequent Access):成本更低.存储期限更长3.归档类型(Archive):不经常访问数据的备

java 阿里云oss存储问题

问题描述 java 阿里云oss存储问题 最近项目需要把图片视频上传阿里云的oss,代码写完后测试,本地部署上传图片到oss完全没问题,但是部署到服务器上传图片页面就报504错误,oss我设置的timeout是50S,一张图片也就几十KB,不可能超时啊,所以我怀疑是其他什么原因,但是我想了一天,还是没个结果,所以在此求救大神帮助....在线等 解决方案 有大神愿意的话加QQ好友交流 解决方案二: 504是服务端错误 你的服务端代码出错了 解决方案三: 服务器错误 服务器环境和本地环境有区别 你再

JEESZ分布式架构集成阿里云OSS存储

摘要: 1. 服务接口定义 /**  * 文件上传  1:头像 2:显示图片 3:个人封面  :4:基础图片   * @param request  * @param response  * @param uid 用户id  * @param userType 文件上传  1:头像 2:显示图片 3:个人封面  :4:基础图片 0:视频  * @param files 上传的文件对象  * @return  1. 服务接口定义 /**  * 文件上传  1:头像 2:显示图片 3:个人封面  :

WordPress和阿里云对象存储OSS配置教程

传统情况下,网站源码以及数据库.图片等资源都是存储在一个服务器上的.这样的配置会存在这样的尴尬问题:当网站数据越来越多的时候,就面临着存储空间不够用.升级服务器配置.访问出现卡顿等情况.而解决此问题的最好方法就是将网站.数据库以及图片等资源分开管理,存储在不同的服务器上,这样使用时只需要在主服务器上调用即可.浪子虎博客使用的就是阿里云的OSS存储服务.下面,就随着浪子虎的脚步踏入WordPress博客使用阿里云OSS存储资源的步伐吧. 1. 安装WordPress 当然,如果你连WordPres

使用java开发阿里云OSS开放云存储服务

购买了阿里云后,我们发现一般ECS的存储空间都比较小,当然我们可以动态的扩展一些存储空间.但是作为开发者,我们在日常使用中需要一些更大的灵活性,因此就需要我们自己对OSS存储有一些自己的扩展.今天就为大家分享一下如何使用java来对接阿里云的OSS存储服务. OSS产品概述 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.您可以通过调用 API,在任何应用.任何时间.任何地点上传和下载数据,也可以通过 Web

阿里云oss挂载到linux本地文件系统

对象存储 OSS 阿里云对象存储服务 (OSS) 是一种高度可伸缩且安全可靠的云对象存储服务,让您可以存储.备份和归档大量数据.阿里云 OSS 是一种简单易用的服务,让您每秒能处理数百万请求,它还支持大数据.科学与财务分析以及媒体应用. 阿里云是一家全球性云对象存储提供商,让您可以随时随地以高度安全.经济实惠的方式存储.处理和访问数据.阿里云 OSS 为企业提供加密云存储,具有自动数据复制与故障转移功能及高达 99.9% 的服务可用性和数据可靠性,是容灾的理想选择. 对比 阿里云OSS : 好处

国内首家 Docker新增支持阿里云OSS

近年来,开源的容器应用引擎Docker在企业IT市场中风生水起,短短两年内,建立在Docker容器软件内的应用被下载5.35亿次.全球约有400万人在使用Docker,约有150,000个在线应用靠Docker容器运行,大型企业正在空前快速地测试或计划采用Docker,胜过其他任何开源的云端产品. 8月12日,Docker1.8和Docker Registry 2.1发布,新版本中加入了Docker Registry对阿里云开放存储服务的正式支持,阿里云成为被Docker官方支持的存储服务的云服

阿里云文件存储和自我管理的云解决方案的TCO比较

    阿里云文件存储是一种完全托管的文件存储服务. 很多客户也会使用第三方软件搭建自我管理的云解决方案. 本文重点从总体拥有成本(TCO)的角度,对这两种文件存储服务进行比较.   使用阿里云文件存储服务的总拥有成本,是使用第三方软件的自我管理云解决方案的28.91%     阿里云文件存储架构:                                           图1: 阿里云文件存储功能块图        阿里云文件存储是基于阿里云飞天平台的分布式共享文件系统.具有高可靠.

阿里云文件存储助力悦跑圈上云之成功案例

广州悦跑信息科技有限公司是一家专注于通过移动互联网应用以及跑步社交运动和线下赛事活动,为中国跑步爱好者提供全方位服务的高科技企业.截止2017年1月,旗下悦跑圈APP用户规模达3000万.   作为典型的O2O的应用,悦跑圈需要在服务器端维护海量的核心业务数据,并且需要高可用.高可靠和稳定安全的平台来存储数据.   针对以上需求,有三种方案可以从不同层面满足,分别是: 本地文件服务器.自建文件服务器和阿里云文件存储服务.   本地文件服务器方案: 需要在本地IDC中维护独立的硬件设备和文件服务的