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