如何实现OSS错误响应?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

如何实现OSS错误响应?

青衫无名 2017-10-23 14:33:40 5318
当用户访问OSS出现错误时,OSS会返回给用户相应的错误码和错误信息,便于用户定位问题,并做出适当的处理。

OSS的错误响应格式


当用户访问OSS出错时,OSS会返回给用户一个合适的3xx,4xx或者5xx的HTTP状态码;以及一个application/xml格式的消息体。
[backcolor=transparent]错误响应的消息体例子: <?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原因及排除请参看权限问题及排查
BucketAlreadyExistsBucket已经存在409CreateBucket指定的BucketName已经使用,请选择新的BucketName
BucketNotEmptyBucket不为空409DeleteBucket前请先删除文件和未完成的分片上传任务
CallbackFailed上传回调失败203原因及排除请参看上传回调错误及排除
EntityTooLarge实体过大400Post请求消息长度超过 [backcolor=transparent]5GB,原因及排除请参看PostObject错误及排查
EntityTooSmall实体过小400Post请求消息长度太短,排除请参看PostObject错误及排查
FieldItemTooLongPost请求中表单域过大400除了file的表单域大小不要超过4KB,排除请参看PostObject错误及排查
FilePartInterity文件Part已改变400读分片数据时发现数据与校验和不符
FilePartNotExist文件Part不存在400CompleteMultipartUpload提交的分片没有上传
FilePartStale文件Part过时400读分片数据时发现数据与长度不符
IncorrectNumberOfFilesInPOSTRequestPost请求中文件个数非法400Post请求表单域中只能有一个file域,排除请参看PostObject错误及排查
InvalidArgument参数格式错误400参数格式不符合要求,请对照相应API
InvalidAccessKeyIdAccessKeyId不存在403AccessKeyId无效或过期,排除请参看403错误及排查
InvalidBucketName无效的Bucket名字400Bucket命名规则请参看开发人员指南
InvalidDigest无效的摘要400指定的MD5校验值与文件不符,MD5的计算方法请参见PutObject
InvalidEncryptionAlgorithmError指定的熵编码加密算法错误400目前只支持AES256加密算法,详见PutObject
InvalidObjectName无效的Object名字400ObjectName命名规则请参看开发人员指南
InvalidPart无效的Part400CompleteMultipartUpload提交的Part无效,PartNumber或ETag错误
InvalidPartOrder无效的part顺序400CompleteMultipartUpload提交的Part需按照PartNumber升序排列
InvalidPolicyDocument无效的Policy文档400Post请求中Policy无效,排除请参看PostObject错误及排查
InvalidTargetBucketForLoggingLogging操作中有无效的目标bucket400存放Logging的目标bucket不存在,请更换
InternalErrorOSS内部发生错误500请重试
MalformedXMLXML格式非法400请求中XML非法,请根据具体请求排除DeleteObjectsCompleteMultipartUploadPutBucketLoggingPutBucketWebsitePutBucketLifecyclePutBucketRefererPutBucketCORS
MalformedPOSTRequestPost请求的body格式非法400表单域格式非法,排除请参看PostObject错误及排查
MaxPOSTPreDataLengthExceededErrorPost请求上传文件内容之外的body过大400除了file的表单域大小不要超过4KB,排除请参看PostObject错误及排查
MethodNotAllowed不支持的方法405以OSS不支持的操作来访问资源
MissingArgument缺少参数411请参看具体的API对照解决
MissingContentLength缺少内容长度411消息即非chunked encoding又没有携带Content-Length
NoSuchBucketBucket不存在404
NoSuchKeyObject不存在404
NoSuchUploadMultipart Upload ID不存在404没有初始化分片上传或者初始化的分片上传过期
NotImplemented无法处理的方法400OSS不支持的操作
ObjectNotAppendable不是可追加文件409OSS有三类文件normalappendablemultipart,只有appendable类型的文件才能执行AppendObject
PositionNotEqualToLengthAppend的位置和文件长度不相等409详见AppendObject
PreconditionFailed预处理错误412下载条件不符合,详见GetObject
RequestTimeTooSkewed发起请求的时间和服务器时间超出15分钟403排除请参看403错误及排查
RequestTimeout请求超时400请重试
RequestIsNotMultiPartContentPost请求content-type非法400排除请参看PostObject错误及排查
DownloadTrafficRateLimitExceeded下载流量超过限制503默认上限是 [backcolor=transparent]5Gbps,包括内外网,有调整需求请提交工单
UploadTrafficRateLimitExceeded上传流量超过限制503默认上限是 [backcolor=transparent]5Gbps,包括内外网,有调整需求请提交工单
SignatureDoesNotMatch签名错误403排除请参看Header中签名URL中签名
TooManyBucketsBucket数目超过限制400默认上限是 [backcolor=transparent]10,有调整需求请提交工单

OSS常见错误及排除
SDK/Tool常见错误及排除

OSS不支持的操作


如果试图以OSS不支持的操作来访问某个资源,返回405 Method Not Allowed错误。
[backcolor=transparent]错误请求示例: ABC /1.txt HTTP/1.1
Host: bucketname.oss-cn-shanghai.aliyuncs.com
Date: Thu, 11 Aug 2016 03:53:40 GMT
Authorization: signatureValue


[backcolor=transparent]返回示例: 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错误
[backcolor=transparent]错误请求示例: 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


[backcolor=transparent]返回示例: 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>

XML Java API 开发工具 对象存储 数据格式 Python
分享到
取消 提交回答
全部回答(0)
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程