當用戶訪問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無效,PartNumberETag錯誤
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非法,請根據具體請求排除DeleteObjectsCompleteMultipartUploadPutBucketLoggingPutBucketWebsitePutBucketLifecyclePutBucketRefererPutBucketCORS
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有三類檔案normalappendablemultipart,只有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>