6. OSS的错误响应

优质
小牛编辑
124浏览
2023-12-01

当用户访问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 CodeOSS返回给用户的错误码。

n MessageOSS给出的详细错误信息。

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