本文介紹OSS相容的S3 API以及OSS與S3的差異。
OSS相容的S3 API
OSS對S3 Bucket、Object以及Multipart操作相容的API如下:
操作類型 | API |
Bucket操作 |
|
Object操作 |
|
Multipart操作 |
|
OSS與S3的差異
OSS與S3的差異如下:
請求風格
S3支援路徑(Path)請求風格和虛擬託管(Virtual Hosted)請求風格。路徑風格將Bucket名稱放在URL路徑中,而虛擬託管風格將Bucket名稱作為子網域名稱。基於安全考慮,OSS僅支援虛擬託管訪問方式,即Bucket名稱必須作為子網域名稱使用。因此,在S3遷移至OSS後,用戶端應用和S3工具都需要進行相應設定,確保所有請求採用虛擬託管風格,否則可能導致OSS報錯,並禁止訪問。
ACL許可權定義
OSS對ACL許可權的定義與S3不完全一致,二者的主要區別如下:
層級
許可權
S3
OSS
Bucket
READ
擁有Bucket的list許可權。
對於Bucket下的所有Object,如果某Object沒有設定Object許可權,則該Object可讀。
WRITE
Bucket下的Object可寫入或覆蓋。
對於Bucket下不存在的Object,可寫入。
對於Bucket下存在的Object,如果該Object沒有設定Object許可權,則該Object可被覆蓋。
可以初始化分區上傳(InitiateMultipartUpload)。
READ_ACP
讀取Bucket ACL
讀取Bucket ACL,僅Bucket owner和授權子帳號擁有此許可權。
WRITE_ACP
設定Bucket ACL。
設定Bucket ACL,僅Bucket owner和授權子帳號擁有此許可權。
Object
READ
Object可讀。
Object可讀。
WRITE
N/A
Object可以被覆蓋。
READ_ACP
讀取Object ACL。
讀取Object ACL,僅Bucket owner和授權RAM使用者擁有此許可權。
WRITE_ACP
設定Object ACL。
設定Object ACL,僅Bucket owner和授權RAM使用者擁有此許可權。
重要OSS僅支援S3中的私人、公用讀取和公用讀寫三種ACL模式。
儲存類型
OSS支援標準(Standard)、低頻訪問(IA)和Archive Storage(Archive)三種儲存類型,分別對應Amazon S3中的STANDARD、STANDARD_IA和GLACIER。您可以根據需要轉換OSS Object的儲存類型。
如果未開啟歸檔直讀,Archive Storage類型的Object在讀取之前,要先使用Restore請求進行解凍操作。與S3不同,OSS會忽略S3 API中的解凍天數設定,解凍狀態預設持續1天,使用者可以延長到最多7天,之後,Object又回到初始時的冷凍狀態。
ETag
對於PUT方式上傳的Object,OSS Object的ETag與Amazon S3在大小寫上有區別。OSS為大寫,而S3為小寫。如果用戶端有關於ETag的校正,請忽略大小寫。
對於分區上傳的Object,OSS的ETag計算方式與S3不同。