使用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。

说明

以华东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

字符串

访问域名,格式为BucketName.Endpoint

默认值:无

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概览