當用戶訪問OSS出現錯誤時,OSS會返回給用戶相應的錯誤碼和錯誤資訊,便於用戶定位問題,並做出適當的處理。
OSS的錯誤響應格式
當用戶訪問OSS出錯時,OSS會返回給用戶一個合適的3xx,4xx或者5xx的HTTP狀態碼;以及一個application/xml格式的消息體。
錯誤響應的消息體例子:
<?xml version="1.0" ?>
<Error xmlns=”http://doc.oss-cn-hangzhou.aliyuncs.com”>
<Code>
AccessDenied
</Code>
<Message>
Query-string authentication requires the Signature, Expires and OSSAccessKeyId parameters
</Message>
<RequestId>
1D842BC5425544BB
</RequestId>
<HostId>
oss-cn-hangzhou.aliyuncs.com
</HostId>
</Error>
所有錯誤的消息體中都包括以下幾個元素:
- Code:OSS返回給用戶的錯誤碼。
- Message:OSS給出的詳細錯誤資訊。
- RequestId:用於唯一標識該次請求的UUID;當你無法解決問題時,可以憑這個RequestId來請求OSS開發工程師的幫助。
- HostId:用於標識訪問的OSS叢集,與用戶請求時使用的Host一致。
其他特殊的錯誤資訊元素請參照每個請求的具體介紹。
OSS的錯誤碼
OSS的錯誤碼列表如下:
錯誤碼 | 描述 | HTTP狀態碼 | 說明 |
---|---|---|---|
AccessDenied | 拒絕訪問 | 403 | 原因及排除請參看許可權問題及排查 |
BucketAlreadyExists | Bucket已經存在 | 409 | CreateBucket指定的BucketName已經使用,請選擇新的BucketName |
BucketNotEmpty | Bucket不為空 | 409 | DeleteBucket前請先刪除檔案和未完成的分區上傳任務 |
CallbackFailed | 上傳回調失敗 | 203 | 原因及排除請參看上傳回調錯誤及排除 |
EntityTooLarge | 實體過大 | 400 | Post請求消息長度超過 5GB,原因及排除請參看PostObject錯誤及排查 |
EntityTooSmall | 實體過小 | 400 | Post請求消息長度太短,排除請參看PostObject錯誤及排查 |
FieldItemTooLong | Post請求中表單域過大 | 400 | 除了file 的表單域大小不要超過4KB,排除請參看PostObject錯誤及排查 |
FilePartInterity | 檔案Part已改變 | 400 | 讀分區數據時探索資料與校驗和不符 |
FilePartNotExist | 檔案Part不存在 | 400 | CompleteMultipartUpload提交的分區沒有上傳 |
FilePartStale | 檔案Part過時 | 400 | 讀分區數據時探索資料與長度不符 |
IncorrectNumberOfFilesInPOSTRequest | Post請求中檔案個數非法 | 400 | Post請求表單域中只能有一個file 域,排除請參看PostObject錯誤及排查 |
InvalidArgument | 參數格式錯誤 | 400 | 參數格式不符合要求,請對照相應API |
InvalidAccessKeyId | AccessKeyId不存在 | 403 | AccessKeyId無效或過期,排除請參看403錯誤及排查 |
InvalidBucketName | 無效的Bucket名字 | 400 | Bucket命名規則請參看開發人員指南 |
InvalidDigest | 無效的摘要 | 400 | 指定的MD5校驗值與檔案不符,MD5的計算方法請參見PutObject |
InvalidEncryptionAlgorithmError | 指定的熵編碼密碼編譯演算法錯誤 | 400 | 目前只支援AES256 密碼編譯演算法,詳見PutObject |
InvalidObjectName | 無效的Object名字 | 400 | ObjectName命名規則請參看開發人員指南 |
InvalidPart | 無效的Part | 400 | CompleteMultipartUpload提交的Part無效,PartNumber 或ETag 錯誤 |
InvalidPartOrder | 無效的part順序 | 400 | CompleteMultipartUpload提交的Part需按照PartNumber 升序排列 |
InvalidPolicyDocument | 無效的Policy文檔 | 400 | Post請求中Policy 無效,排除請參看PostObject錯誤及排查 |
InvalidTargetBucketForLogging | Logging操作中有無效的目標bucket | 400 | 存放Logging的目標bucket不存在,請更換 |
InternalError | OSS內部發生錯誤 | 500 | 請重試 |
MalformedXML | XML格式非法 | 400 | 請求中XML 非法,請根據具體請求排除DeleteObjects、CompleteMultipartUpload、PutBucketLogging、PutBucketWebsite、PutBucketLifecycle、PutBucketReferer、PutBucketCORS |
MalformedPOSTRequest | Post請求的body格式非法 | 400 | 表單域格式非法,排除請參看PostObject錯誤及排查 |
MaxPOSTPreDataLengthExceededError | Post請求上傳檔案內容之外的body過大 | 400 | 除了file 的表單域大小不要超過4KB,排除請參看PostObject錯誤及排查 |
MethodNotAllowed | 不支援的方法 | 405 | 以OSS不支援的操作來訪問資源 |
MissingArgument | 缺少參數 | 411 | 請參看具體的API對照解決 |
MissingContentLength | 缺少內容長度 | 411 | 消息即非chunked encoding又沒有攜帶Content-Length |
NoSuchBucket | Bucket不存在 | 404 | |
NoSuchKey | Object不存在 | 404 | |
NoSuchUpload | Multipart Upload ID不存在 | 404 | 沒有初始化分區上傳或者初始化的分區上傳過期 |
NotImplemented | 無法處理的方法 | 400 | OSS不支援的操作 |
ObjectNotAppendable | 不是可追加檔案 | 409 | OSS有三類檔案normal、appendable、multipart,只有appendable 類型的檔案才能執行AppendObject |
PositionNotEqualToLength | Append的位置和檔案長度不相等 | 409 | 詳見AppendObject |
PreconditionFailed | 預先處理錯誤 | 412 | 下載條件不符合,詳見GetObject |
RequestTimeTooSkewed | 發起請求的時間和伺服器時間超出15分鐘 | 403 | 排除請參看403錯誤及排查 |
RequestTimeout | 請求逾時 | 400 | 請重試 |
RequestIsNotMultiPartContent | Post請求content-type非法 | 400 | 排除請參看PostObject錯誤及排查 |
DownloadTrafficRateLimitExceeded | 下載流量超過限制 | 503 | 預設上限是 5Gbps,包括內外網,有調整需求請提交工單 |
UploadTrafficRateLimitExceeded | 上傳流量超過限制 | 503 | 預設上限是 5Gbps,包括內外網,有調整需求請提交工單 |
SignatureDoesNotMatch | 簽名錯誤 | 403 | 排除請參看Header中籤名、URL中籤名 |
TooManyBuckets | Bucket數目超過限制 | 400 | 預設上限是 10,有調整需求請提交工單 |
SDK/Tool常見錯誤及排除
OSS不支援的操作
如果試圖以OSS不支援的操作來訪問某個資源,返回405 Method Not Allowed錯誤。
錯誤請求樣本:
ABC /1.txt HTTP/1.1
Host: bucketname.oss-cn-shanghai.aliyuncs.com
Date: Thu, 11 Aug 2016 03:53:40 GMT
Authorization: signatureValue
返回樣本:
HTTP/1.1 405 Method Not Allowed
Server: AliyunOSS
Date: Thu, 11 Aug 2016 03:53:44 GMT
Content-Type: application/xml
Content-Length: 338
Connection: keep-alive
x-oss-request-id: 57ABF6C8BC4D25D86CBA5ADE
Allow: GET DELETE HEAD PUT POST OPTIONS
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>MethodNotAllowed</Code>
<Message>The specified method is not allowed against this resource.</Message>
<RequestId>57ABF6C8BC4D25D86CBA5ADE</RequestId>
<HostId>bucketname.oss-cn-shanghai.aliyuncs.com</HostId>
<Method>abc</Method>
<ResourceType>Bucket</ResourceType>
</Error>
![]() |
说明 |
如果訪問的資源是 /bucket/, ResourceType應該是bucket,如果訪問的資源是 /bucket/object,ResourceType應該是object。 |
OSS操作支援但參數不支援的操作
如果在OSS合法的操作中,添加了OSS不支援的參數(例如在PUT的時候,加入If-Modified-Since參數),OSS會返回400 Bad Request錯誤
錯誤請求樣本:
PUT /abc.zip HTTP/1.1
Host: bucketname.oss-cn-shanghai.aliyuncs.com
Accept: */*
Date: Thu, 11 Aug 2016 01:44:50 GMT
If-Modified-Since: Thu, 11 Aug 2016 01:43:51 GMT
Content-Length: 363
返回樣本:
HTTP/1.1 400 Bad Request
Server: AliyunOSS
Date: Thu, 11 Aug 2016 01:44:54 GMT
Content-Type: application/xml
Content-Length: 322
Connection: keep-alive
x-oss-request-id: 57ABD896CCB80C366955187E
x-oss-server-time: 0
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>NotImplemented</Code>
<Message>A header you provided implies functionality that is not implemented.</Message>
<RequestId>57ABD896CCB80C366955187E</RequestId>
<HostId>bucketname.oss-cn-shanghai.aliyuncs.com</HostId>
<Header>If-Modified-Since</Header>
</Error>