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

本文涉及的产品
对象存储 OSS,20GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
对象存储 OSS,内容安全 1000次 1年
简介:

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。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
2月前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
109 0
|
3月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
12天前
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
19天前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
37 1
|
1月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
82 9
|
2月前
|
存储 JavaScript 前端开发
Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】
这篇文章介绍了在Vue中实现图片上传到阿里云OSS对象存储服务的完整流程,包括服务端签名直传的前提知识、后端设置、前端组件封装以及图片上传和回显的效果展示。
|
2月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
|
2月前
|
存储 Java 关系型数据库
实时计算 Flink版产品使用问题之以jar包方式同步数据是否需要定义存储oss的位置
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
分布式计算 DataWorks 调度
DataWorks产品使用合集之多个业务流程上传同名资源到同一个OSS(对象存储服务)URL,会产生什么问题
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。

相关产品

  • 对象存储