使用REST API向OSS发起请求
您可以直接发起REST API请求。使用REST API发起请求适用于对程序自定义要求较高的场景。您需要手动编写代码计算签名并将签名添加到REST API请求中。OSS仅支持虚拟托管(Virtual Hosted)风格的REST API请求。
OSS域名构成规则
针对OSS的网络请求,除了GetService(ListBuckets)以及DescribeRegions API以外,其他所有请求的域名都是由带有指定Bucket信息的三级域名组成的。
访问域名结构为BucketName.Endpoint
。BucketName为您的存储空间名称,Endpoint为存储空间对应的地域域名。
Endpoint分为外网、内网以及传输加速Endpoint。
OSS以HTTP RESTful API的形式对外提供服务。访问不同的Region需要不同的Endpoint。关于Region和Endpoint对照表,请参见OSS地域和访问域名。
内网、外网Endpoint可以直接使用,无需额外配置。
传输加速Endpoint使用前需先开启Bucket的传输加速功能。具体操作,请参见开启传输加速。
您可以通过绑定自定义域名或绑定自定义域名至OSS传输加速域名,将OSS的外网Endpoint替换为您的自定义域名。
以华东1(杭州)地域的访问域名为例,说明如下。
请求风格
基于安全考虑,OSS不支持路径(Path)风格的REST API请求,仅支持虚拟托管风格的REST API请求。在虚拟托管风格的URL中,存储空间(Bucket)名称是域名的一部分。
虚拟托管风格的URL格式如下:
https://BucketName.Endpoint/objectName
虚拟托管风格的URL示例如下:
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/demo.png
请求头格式
向OSS发起的REST API请求的请求头格式如下:
GET / HTTP/1.1
Host: BucketName.Endpoint
Date: GMT Date
Authorization: SignatureValue
名称 | 类型 | 描述 |
Date | 字符串 | HTTP 1.1协议中规定的GMT时间,例如Sun, 05 Sep 2021 23:00:00 GMT。 默认值:无 |
Host | 字符串 | 访问域名,格式为 默认值:无 |
Authorization | 字符串 | 用于验证请求合法性的认证信息。 默认值:无 使用场景:非匿名请求 |
请求示例
虚拟托管风格请求示例
OSS资源示例如下:
存储空间名称:examplebucket
地域:oss-cn-hangzhou
文件名称:demo.png
URL示例如下:
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/demo.png
请求示例如下:
GET /demo.png HTTP/1.1
Host: examplebucket.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
自定义域名请求示例
自定义域名示例如下:
自定义域名为www.example.com。
OSS资源示例如下:
存储空间名称:examplebucket
文件名称:demo.png
URL示例如下:
https://www.example.com/demo.png
请求示例如下:
GET /demo.png HTTP/1.1
Host: example.com
Date: GMT Date
Authorization: SignatureValue
签名方式
您可以选择以下任意一种方式计算签名并将签名添加到REST API请求中:
在Header中包含签名:一般情况下,推荐您使用在Header中包含签名的签名方式。详情请参见在Header中包含签名。
在URL中包含签名:使用在URL中签名的方式,会将授权的数据在过期时间内暴露在互联网上,具有一定的风险。该方式适用于将URL转给第三方实现授权访问的场景。详情请参见在URL中包含签名。
以上两种签名方式的区别如下:
项目 | 在Header中包含签名 | 在URL中包含签名 |
是否支持设置Expires | 否 | 是 |
常用Method | GET、POST、PUT、DELETE | GET、PUT |
时间格式 | 通过Date请求头表示请求时间,格式为GMT。 重要 如果Date表示的请求时间和OSS服务器的当前时间相差15分钟以上,OSS服务器将拒绝该请求,并返回HTTP 403错误。 | 通过Expires字段表示过期时间,格式为Unix时间戳。 重要 如果OSS接收到该URL请求的时间晚于签名中包含的Expires参数时,则返回请求超时错误。 |
Signature是否需要URL编码 | 否 | 是 |
API
关于OSS提供的REST API接口,请参见API概览。