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

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
日志服务 SLS,月写入数据量 50GB 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
AI 代码解读

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

nc bucket-example.oss-cn-qingdao.aliyuncs.com 80
AI 代码解读

看结果,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
AI 代码解读

我们先获取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
AI 代码解读

执行过程及结果结果如下图,如果源和目的为同一个文件可通过更改头部更改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
AI 代码解读

执行过程及结果如下图,现在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
AI 代码解读

将此请求发送给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
AI 代码解读

过滤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=
AI 代码解读

进行重放,成功

这里写图片描述

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,搭建一个在线教育视频课程分享网站。
目录
打赏
0
0
0
0
3095
分享
相关文章
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
308 0
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能
### SpringBoot3 + Vue3 前后端分离的Java快速开发框架更新 本次更新主要包含以下内容: 1. **端口修改**:为避免与Minio存储服务冲突,后端启动端口从9000改为9999。 2. **添加存储支持**:集成Minio和阿里云OSS对象存储服务,详细配置请参考相关文档。 3. **短信服务**:接入阿里云短信服务,并增加模拟发送功能,方便本地测试。 4. **邮件发送**:引入邮件发送功能,支持简单文本邮件和带附件邮件。 5. **完善个人中心**:优化个人中心页面,提升用户体验。
200 85
Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
阿里云对象存储OSS收费标准,存储、流量和请求等多个计费项
阿里云对象存储OSS收费标准涵盖存储、流量及请求费用,提供按量付费和包年包月两种模式。标准型OSS按量付费为0.09元/GB/月,包年包月40GB仅9元/年,500GB优惠价118元/年。流量费仅收取公网流出方向,内网流入流出免费。
244 13
阿里云对象存储OSS收费标准:存储、流量和请求等多个计费项详解
阿里云对象存储OSS提供多样化的计费模式,涵盖存储、流量、请求等多项费用。存储费用方面,按量付费标准型为0.09元/GB/月,包年包月则有9元40GB等多种选择。流量费用仅对公网出方向收费,价格区间从0.25至0.50元/GB不等,支持按量付费与流量包抵扣两种方式。更多详情及精准报价,欢迎访问阿里云OSS官方页面。
4260 1
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
1298 7
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
阿里云对象存储OSS收费标准,存储、流量和请求等多个计费项
阿里云对象存储OSS提供按量付费与包年包月两种计费方式,涵盖存储、流量、请求等费用。标准存储按量付费0.09元/GB/月,包年包月40GB起售,价格9元/年。公网流量出方向收费,内网及上传免费。具体费用视使用情况而定,详情见官网。
691 0
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
107 1

云存储

+关注

相关产品

  • 对象存储