天天看點

OSS定制自定義response header一 傳入方式二、通路方式三、例子四、限制條件

      OSS支援使用者在上傳時指定"x-oss-meta-"字首的header作為自定義header,用于存儲檔案的一些辨別資訊等自定義的資訊,并在下載下傳(GetObject/HeadObject)時作為傳回頭傳回給使用者。但是在某些場景下使用者需要使用非"x-oss-meta-"字首的header作為自定義header,比如使用者的資料原來存儲在自建的儲存設備上,并且自定義了一些header,現在資料遷移到OSS上,需要保持這些header不變,是以OSS提供了相應的機制用來實作這個需求。

      這個請求頭的格式如下:

          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()上傳方式

      這個表單域的值格式與上面1所述相同,這種傳入方式适用于PostObject(),即表單上傳

      如果使用者通過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)

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

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

Accept: */*

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

x-oss-request-id: 5A9612F95C44F0A86ADF3213

Accept-Ranges: bytes

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

x-oss-object-type: Normal

x-oss-storage-class: Standard

myheader1: myvalue1

myheader2: myvalue2

x-oss-server-time: 92

    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

繼續閱讀