OSS定制自定义response header

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: OSS通过传入"x-oss-persistent-headers"这个头,支持指定非"x-oss-meta-"开头的usermeta,满足特定用户特定场景的需求

      OSS支持用户在上传时指定"x-oss-meta-"前缀的header作为自定义header,用于存储文件的一些标识信息等自定义的信息,并在下载(GetObject/HeadObject)时作为返回头返回给用户。但是在某些场景下用户需要使用非"x-oss-meta-"前缀的header作为自定义header,比如用户的数据原来存储在自建的存储设备上,并且自定义了一些header,现在数据迁移到OSS上,需要保持这些header不变,因此OSS提供了相应的机制用来实现这个需求。

一 传入方式

1、通过"x-oss-persistent-headers"这个请求头传入

      这个请求头的格式如下:

          x-oss-persistent-headers: key1:base64_encode(value1),key2:base64_encode(value2)....

      其中key1/key2等为自定义的header,value2/value2等为对应自定义header的值,base64_encode指做base64编码,即将自定义header和对应值的base64编码作为一个key-value对用冒号连接,然后用逗号将所有的key-value对连接起来,放在x-oss-persistent-headers这个header中即可。

      例子:假如我要自定义两个header,分别为myheader1/myheader2,值分别为myvalue1/myvalue2,则需要在上传时指定下面这个头

          x-oss-persistent-headers:myheader1:bXl2YWx1ZTE=,myheader2:bXl2YWx1ZTI=

      这种方式适用于PutObject()/CopyObject()/AppendObject()/CompleteMultipartUpload()上传方式

2、通过"x-oss-persistent-headers"这个表单域传入

      这个表单域的值格式与上面1所述相同,这种传入方式适用于PostObject(),即表单上传

3、镜像回源时源站返回"x-oss-persistent-headers"

      如果用户通过OSS的镜像回源功能,也想保存类似的自定义header,则需要镜像源站返回"x-oss-persistent-headers"头,格式与1所述相同。这种方式适用于镜像回源。

二、访问方式

      通过GetObject()/HeadObject()接口,自定义的usermeta会通过返回头的方式返回给用户,比如上例,就会在回应头中增加两个头

                      myheader1:myvalue1

                      myheader2:myvalue2

三、例子

      接上述例子,上传时的完整的请求如下:

PUT /tmp HTTP/1.1

Host: 067365.oss-cn-hangzhou.aliyuncs.com

Accept-Encoding: identity

Content-Length: 19

User-Agent: aliyun-sdk-python/0.3.7 (Linux/2.6.32-220.23.2.ali1089.el5.x86_64/x86_64;2.7.8)

Host: 067365.oss-cn-hangzhou.aliyuncs.com

Date: Wed, 28 Feb 2018 02:03:25 GMT

x-oss-persistent-headers: myheader1:bXl2YWx1ZTE=,myheader2:bXl2YWx1ZTI=

Content-Type: application/octet-stream

Authorization: OSS a1nBNgkzzxcQMf8u:AT2DUCaIh4g9KLxEGmga2K82lf8=


for user meta test


HTTP/1.1 200 OK

Server: AliyunOSS

Date: Wed, 28 Feb 2018 02:03:25 GMT

Content-Length: 0

Connection: keep-alive

x-oss-request-id: 5A960DEDC46757366ADDB10D

ETag: "0F07FE95A928BB5A491AEFD31D6911AA"

x-oss-hash-crc64ecma: 13270199186025944929

Content-MD5: Dwf+lakou1pJGu/THWkRqg==

x-oss-server-time: 103


      下载文件时完整请求和响应如下:

GET /tmp HTTP/1.1

User-Agent: curl/7.15.5 (x86_64-koji-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5

Host: 067365.oss-cn-hangzhou.aliyuncs.com

Accept: */*


HTTP/1.1 200 OK

Server: AliyunOSS

Date: Wed, 28 Feb 2018 02:24:57 GMT

Content-Type: application/octet-stream

Content-Length: 19

Connection: keep-alive

x-oss-request-id: 5A9612F95C44F0A86ADF3213

Accept-Ranges: bytes

ETag: "0F07FE95A928BB5A491AEFD31D6911AA"

Last-Modified: Wed, 28 Feb 2018 02:03:25 GMT

x-oss-object-type: Normal

x-oss-hash-crc64ecma: 13270199186025944929

x-oss-storage-class: Standard

myheader1: myvalue1

myheader2: myvalue2

Content-MD5: Dwf+lakou1pJGu/THWkRqg==

x-oss-server-time: 92


for user meta test


四、限制条件

  •     1. 通过这种方式指定的自定义header,不能以"x-oss-"为前缀,比如可以指定"myheader",但是不能指定"x-oss-myheader"
  •     2. 不能指定HTTP规定的标准头,比如host/content-md5/origin/range等等
  •     3. 如果上传时传入了与指定的自定义header相同的header,则两个header的值要保持相同。比如通过"x-oss-persistent-headers"指定了myheader,同时在请求头中单独传入了myheader,则两个header的值要相同
  •     4. 这种方式指定的自定义header也属于usermeta的范畴,因此也有最多8KB的限制,即所有的usermta总大小不能超过8KB


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
2月前
|
存储 网络协议 网络安全
oss自定义域名绑定(Custom Domain Binding)
阿里云OSS支持自定义域名绑定,让用户可通过自有域名访问存储文件。步骤包括:1) 确保域名已备案并在阿里云验证;2) 在OSS控制台选择Bucket,绑定自定义域名并验证备案号;3)(可选)配置SSL证书;4) 在DNS服务商处设置CNAME记录;5)(可选)启用CDN加速。此功能有助于提升品牌识别度、安全性和文件预览体验。
773 1
|
2月前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之生成的图片的oss地址配成自定义的域名如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
|
2月前
|
存储 搜索推荐 对象存储
OSS绑定自定义域名至Bucket默认域名
OSS绑定自定义域名至Bucket默认域名
98 1
|
1月前
|
域名解析 对象存储
OSS绑定自定义域名(基于阿里云)
OSS绑定自定义域名(基于阿里云)
45 0
|
PHP 对象存储 数据安全/隐私保护
阿里云OSS php 自定义域名 绑定bucket
做OSS图片上传时,可以采用阿里云分配的oss域名,也可以使用自定义域名(绑定用户域名),使用阿里云域名太长,不美观,我使用的绑定用户域名。使用阿里云分配域名时图片文件可以正常上传,使用自定义绑定用户域名时发现报错.
2117 0
阿里云OSS php 自定义域名 绑定bucket
|
机器学习/深度学习 JSON API
OSS签名Header实现Demo(C#)
OSS的集成上传和下载提供了SDK可以直接使用,但实际使用中一些用户受限环境或者设备限制需要使用api方式来实现上传和下载,本文以PutObject接口为例,提供了C#实现的demo。
1299 0
|
网络协议 数据中心 对象存储
【OSS全球加速】如何利用CNAME自定义加速区域
1 背景     OSS推出的全球加速功能,客户端离OSS数据中心距离越远加速效果就会越好,比如跨洋或者跨大洲预期会有数倍的性能提升,但是对于很多OSS用户,并不一定需要在所有区域加速。     比如用户在国内有个Bucket,用户会在全球各地上传或下载这个Bucket 内的数据,由于OSS本身提供优质的网络及高质量的BGP多线接入能力,在国内大部分区域访问OSS速度都能做到“很快”,此时如果在国内也使用传输加速的话可以做到“更快”,但是“很快”其实已经能够满足大部分用户的需求,用户不愿意为从“很快”到“更快”买单。
15005 0
|
机器学习/深度学习 存储 JSON
OSS签名Header实现Demo(GoLang)
OSS的集成上传和下载提供了SDK可以直接使用,但实际使用中一些用户受限环境或者设备限制需要使用api方式来实现上传和下载,本文以PutObject接口为例,提供了GoLang实现的demo
1598 0
|
机器学习/深度学习 JSON JavaScript
OSS签名Header实现Demo(NodeJS)
OSS的集成上传和下载提供了SDK可以直接使用,但实际使用中一些用户受限环境或者设备限制需要使用api方式来实现上传和下载,本文以PutObject接口为例,提供了NodeJS实现的demo
1303 0
|
机器学习/深度学习 JSON 测试技术
OSS签名Header实现Demo(PHP)
OSS的集成上传和下载提供了SDK可以直接使用,但实际使用中一些用户受限环境或者设备限制需要使用api方式来实现上传和下载,本文以PutObject接口为例,提供了PHP实现的demo
1474 0

相关产品

  • 对象存储