YuXuan
发布于 2020-09-10 / 12 阅读
0

OSS存储开放接口规范和错误响应

开放接口规范

开发者在发送请求给 OSS 时,既可以使用 带签名认证的请求,也可以使用匿名访问。OSS提供的相关API接口如下:
关于Service操作

API描述
getService (listBuckets)返回请求者拥有的所有Bucket

关于Bucket的操作

API描述
createBucket创建Bucket
putBucketACL设置Bucket访问权限
putBucketLogging开启Bucket日志
putBucketWebsite设置Bucket为静态网站托管模式
putBucketReferer设置Bucket的防盗链规则
putBucketLifecycle设置Bucket中Object的生命周期规则
getBucket(ListObject)列出Bucket中所有Object的信息
getBucketAcl获得Bucket访问权限
getBucketLocation获得Bucket所属的数据中心位置信息
getBucketInfo获取Bucket信息
getBucketLogging查看Bucket的访问日志配置情况
getBucketWebsite查看Bucket的静态网站托管状态
getBucketReferer查看Bucket的防盗链规则
getBucketLifecycle查看Bucket中Object的生命周期规则
deleteBucket删除Bucket
deleteBucketLogging关闭Bucket访问日志记录功能
deleteBucketWebsite关闭Bucket的静态网站托管模式
deleteBucketLifecycle删除Bucket中Object的生命周期规则
putBucketEncryption配置Bucket的加密规则
getBucketEncryption获取Bucket的加密规则
deleteBucketEncryption删除Bucket的加密规则

关于Object的操作

API描述
putObject上传Object
copyObject拷贝一个Object成另外一个Object
getObject获取Object
appendObject在Object尾追加上传数据
deleteObject删除Object
deleteMultipleObjects删除多个Object
headObject只返回某个Object的meta信息,不返回文件内容
getObjectMeta返回Object的基本meta信息,包括该Object的ETag、Size(文件大小)、LastModified,不返回文件内容
postObject使用Post上传Object
putObjectACL设置ObjectACL
getObjectACL获取ObjectACL信息
callback上传回调
putSymlink创建软链接
getSymlink获取软链接
restoreObject解冻文件
selectObject用SQL语法查询Object内容
putObjectTagging设置或更新对象标签
getObjectTagging获取对象标签信息
deleteObjectTagging删除指定的对象标签

关于Multipart Upload的操作

API描述
InitiateMultipartUpload初始化MultipartUpload事件
uploadPart分块上传文件
uploadPartCopy分块复制上传文件
completeMultipartUpload完成整个文件的MultipartUpload上传
abortMultipartUpload取消MultipartUpload事件
listMultipartUploads罗列出所有执行中的MultipartUpload事件
listParts罗列出指定UploadID所属的所有已经上传成功Part

跨域资源共享(CORS)

API描述
putBucketcors在指定Bucket设定一个CORS的规则
getBucketcors获取指定的Bucket目前的CORS规则
deleteBucketcors关闭指定Bucket对应的CORS功能并清空所有规则
optionObject跨域访问preflight请求

关于Live Channel的操作

API描述
putLiveChannelStatus切换LiveChannel的状态
putLiveChannel创建LiveChannel
getVodPlaylist获取播放列表
postVodPlaylist生成播放列表
get LiveChannelStat获取LiveChannel的推流状态信息
getLiveChannelInfo获取LiveChannel的配置信息
getLiveChannelHistory获取LiveChannel的推流记录
listLiveChannel列举LiveChannel
deleteLiveChannel删除LiveChannel

案例剖析
从上面的请求中 挑选任意接口分析
createBucket 创建Bucket
putObject 上传Object
getObject 下载Object

OSS云存储错误响应

当用户访问OSS出现错误时,OSS会返回给用户相应的错误码和错误信息,便于用户定位问题,并做出适当的处理。

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>

所有错误的消息体中都包括以下几个元素:

  • Code:OSS返回给用户的错误码。
  • Message:OSS给出的详细错误信息。
  • RequestId:用于唯一标识该次请求的UUID;当你无法解决问题时,可以凭这个RequestId来请求OSS开发工程师的帮助。
  • HostId:用于标识访问的OSS集群(目前统一为oss.aliyuncs.com)

OSS的错误码

OSS的错误码列表如下:

错误码描述HTTP状态码
AccessDenied拒绝访问403
BucketAlreadyExistsBucket已经存在409
BucketNotEmptyBucket不为空409
EntityTooLarge实体过大400
EntityTooSmall实体过小400
FileGroupTooLarge文件组过大400
FilePartNotExist文件Part不存在400
FilePartStale文件Part过时400
InvalidArgument参数格式错误400
InvalidAccessKeyIdAccess Key ID不存在403
InvalidBucketName无效的Bucket名字400
InvalidDigest无效的摘要400
InvalidObjectName无效的Object名字400
InvalidPart无效的Part400
InvalidPartOrder无效的part顺序400
InvalidTargetBucketForLoggingLogging操作中有无效的目标bucket400
InternalErrorOSS内部发生错误500
MalformedXMLXML格式非法400
MethodNotAllowed不支持的方法405
MissingArgument缺少参数411
MissingContentLength缺少内容长度411
NoSuchBucketBucket不存在404
NoSuchKey文件不存在404
NoSuchUploadMultipart Upload ID不存在404
NotImplemented无法处理的方法501
PreconditionFailed预处理错误412
RequestTimeTooSkewed发起请求的时间和服务器时间超出15分钟403
RequestTimeout请求超时400
SignatureDoesNotMatch签名错误403
TooManyBuckets用户的Bucket数目超过限制400

请求一个需要Referer字段的Object

https://test000000000000001.oss-cn-beijing.aliyuncs.com/1.png

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>

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>