6. OSS的错误响应
当用户访问OSS出现错误时,OSS会返回给用户相应的错误码和错误信息,便于用户定位问题,并做出适当的处理。
6.1. OSS的错误响应格式
当用户访问OSS出错时,OSS会返回给用户一个合适的3xx,4xx或者5xx的HTTP状态码;以及一个application/xml格式的消息体。
错误响应的消息体例子:
<?xml version="1.0" ?> <Error xmlns=”http://doc.oss.aliyuncs.com”> <Code> AccessDenied </Code> <Message> Query-string authentication requires the Signature, Expires and OSSAccessKeyId parameters </Message> <RequestId> 1D842BC5425544BB </RequestId> <HostId> oss.aliyuncs.com </HostId> </Error> |
所有错误的消息体中都包括以下几个元素:
n Code:OSS返回给用户的错误码。
n Message:OSS给出的详细错误信息。
n RequestId:用于唯一标识该次请求的UUID;当你无法解决问题时,可以凭这个RequestId来请求OSS开发工程师的帮助。
n HostId:用于标识访问的OSS集群(目前统一为oss.aliyuncs.com)
其他特殊的错误信息元素请参照每个请求的具体介绍。
6.2. OSS的错误码
OSS的错误码列表如下:
错误码 | 描述 | HTTP状态码 |
AccessDenied | 拒绝访问 | 403 |
BucketAlreadyExists | Bucket已经存在 | 409 |
BucketNotEmpty | Bucket不为空 | 409 |
EntityTooLarge | 实体过大 | 400 |
EntityTooSmall | 实体过小 | 400 |
FileGroupTooLarge | 文件组过大 | 400 |
FilePartNotExist | 文件Part不存在 | 400 |
FilePartStale | 文件Part过时 | 400 |
InvalidArgument | 参数格式错误 | 400 |
InvalidAccessKeyId | Access Key ID不存在 | 403 |
InvalidBucketName | 无效的Bucket名字 | 400 |
InvalidDigest | 无效的摘要 | 400 |
InvalidObjectName | 无效的Object名字 | 400 |
InvalidPart | 无效的Part | 400 |
InvalidPartOrder | 无效的part顺序 | 400 |
InvalidTargetBucketForLogging | Logging操作中有无效的目标bucket | 400 |
InternalError | OSS内部发生错误 | 500 |
MalformedXML | XML格式非法 | 400 |
MethodNotAllowed | 不支持的方法 | 405 |
MissingArgument | 缺少参数 | 411 |
MissingContentLength | 缺少内容长度 | 411 |
NoSuchBucket | Bucket不存在 | 404 |
NoSuchKey | 文件不存在 | 404 |
NoSuchUpload | Multipart Upload ID不存在 | 404 |
NotImplemented | 无法处理的方法 | 501 |
PreconditionFailed | 预处理错误 | 412 |
RequestTimeTooSkewed | 发起请求的时间和服务器时间超出15分钟 | 403 |
RequestTimeout | 请求超时 | 400 |
SignatureDoesNotMatch | 签名错误 | 403 |
TooManyBuckets | 用户的Bucket数目超过限制 | 400 |
6.3. OSS不支持分块传输编码
HTTP协议有一种分块传输编码的机制(Chunked Transfer Encoding),即一个HTTP消息可以分成多个部分进行传输。它对HTTP请求和HTTP响应都是适用的。出于安全的考虑,OSS不支持这种分块传输编码方式。如果OSS收到这种分块传输编码方式的请求,回直接返回HTTP错误码:411。该错误码在HTTP协议中的含义是:“The request must be chunked or have a content length”。
6.4. OSS不支持的操作
如果试图以OSS不支持的操作来访问某个资源,返回405 Method Not Allowed错误。
错误请求示例:
abc / HTTP/1.1 Host:oss-example. oss.aliyuncs.com Date: date Authorization: signatureValue |
返回示例:
x-oss-request-id: 2403382433A2EDA8 Allow: GET, DELETE, HEAD, PUT Content-Type: application/xml Transfer-Encoding: chunked Date: Thu, 31 Mar 2011 10:01:52 GMT Server: AliyunOSS <?xml version="1.0" ?> <Error xmlns=”http://doc.oss.aliyuncs.com”> <Code> MethodNotAllowed </Code> <Message> The specified method is not allowed against this resource. </Message> <ResourceType> BUCKET </ResourceType> <Method> abc </Method> <RequestId> 2403382433A2EDA8 </RequestId> <HostId> oss.aliyuncs.com </HostId> </Error> |
注意:如果访问的资源是 /bucket/, ResourceType应该是bucket,如果访问的资源是 /bucket/object,ResourceType应该是object。
6.5. OSS操作支持但参数不支持的操作
如果在OSS合法的操作中,添加了OSS不支持的参数(例如在PUT的时候,加入If-Modified-Since参数),OSS会返回501 Not Implemented错误
错误请求示例:
PUT /my-image.jpg HTTP/1.1 Host:oss-example. oss.aliyuncs.com Date: Wed, 28 May 2011 22:32:00 GMT If-Modified-Since: Wed, 06 Apr 2011 10:02:46 GMT |
返回示例:
501 Not Implemented x-oss-request-id: 77E534EBF90372BE Content-Type: application/xml Transfer-Encoding: chunked Date: Thu, 28 Apr 2011 08:03:07 GMT Connection: close Server: AliyunOSS <?xml version="1.0" ?> <Error xmlns=”http://doc.oss.aliyuncs.com”> <Code> NotImplemented </Code> <Message> A header you provided implies functionality that is not implemented. </Message> <Header> If-Modified-Since </Header> <RequestId> 77E534EBF90372BE </RequestId> <HostId> oss.aliyuncs.com </HostId> </Error> |
[1] 阿里云主机通过内网域名访问OSS,会拥有比访问公网域名更快的响应时间、更高的传输速度;同时,上传、下载流量都是免费的。
[2] OSS提供Bucket访问日志的目的是方便bucket的拥有者理解和分析bucket的访问行为。OSS提供的Bucket访问日志不保证记录下每一条访问记录。
[3] OSS目前支持的子资源包括:acl,group,uploadId,partNumber,uploads,logging
[4] OSS目前支持的override查询字符串包括:response-content-type, response-content-language, response-expires, reponse-cache-control, response-content-disposition, response-content-encoding