本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
結尾標頭的簽章計算 (區塊上傳)AWS (簽章第 4 版)
使用 Authorization標頭驗證請求時,您也可以上傳區塊中的承載。當您以區塊傳送物件的資料時,您也可以選擇包含結尾標頭。(如需詳細資訊,請參閱 授權標頭的簽章計算:以多個區塊傳輸承載 (區塊上傳)AWS (簽章版本 4)。) 本節說明當您要在多個區塊上傳結束時包含結尾標頭時,需要採取的步驟。
重要
當您包含結尾標頭時,您必須在初始標頭中傳送下列項目:
-
您必須
x-amz-content-sha256將 設定為適當的值,表示將包含追蹤器。若要查看 可接受的值x-amz-content-sha256,請參閱 驗證請求:使用授權標頭AWS (簽章第 4 版)。 -
您必須設定
x-amz-trailer以指出您的 包含在結尾標頭中的內容。
追蹤標頭只會在區塊上傳之後傳送。先前的區塊會正常傳送並簽署,如先前章節所述,包括傳送承載為 0 位元組的最終區塊。尾端標頭會包含在自己的區塊中,並在承載為 0 位元組的最終區塊之後傳送。例如,如果您的資料以 100 KB 區塊結尾,您可以傳送下列項目:
-
先前的資料區塊
-
物件的最終區塊為 100 KB
-
0 個位元組區塊,表示物件的結尾
-
追蹤標頭區塊
範例:檢查簽章計算
您可以使用本節中的範例做為參考,以檢查程式碼中的簽章計算。檢閱範例之前,請注意下列事項:
-
這些範例中的簽章計算使用以下範例安全登入資料。
參數 Value AWSAccessKeyIdAKIAIOSFODNN7EXAMPLEAWSSecretAccessKeywJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY -
所有範例都使用請求時間戳記 20130524T000000Z (
Fri, 24 May 2013 00:00:00 GMT)。 -
所有範例都會使用
examplebucket做為儲存貯體名稱。 -
儲存貯體假設位於美國東部 (維吉尼亞北部) 區域,而登入資料
Scope和Signing Key計算會使用us-east-1做為區域指標。 如需詳細資訊,請參閱《Amazon Web Services 一般參考》中的區域和端點。 -
您可以使用路徑樣式或虛擬託管樣式請求。下列範例使用虛擬託管樣式請求,例如:
https://examplebucket.s3.amazonaws.com/photos/photo1.jpg如需詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的儲存貯體虛擬託管。
下列範例會傳送上傳物件的PUT請求。簽章計算假設如下:
-
您正在上傳 65 KB 文字檔案,而檔案內容是由字母 'a' 組成的單字元字串。
-
區塊大小為 64 KB。因此,承載會以三個區塊上傳:64 KB、1 KB,以及具有 0 個位元組區塊資料的最終區塊。
-
產生的物件具有金鑰名稱
chunkObject.txt。 -
您透過新增請求標頭來
x-amz-storage-class請求REDUCED_REDUNDANCY做為儲存體方案。 -
傳輸包含 CRC32C 檢查總和值作為結尾標頭。
如需 API 動作的相關資訊,請參閱 PutObject。一般請求語法如下:
PUT /examplebucket/chunkObject.txt HTTP/1.1 Host: s3.amazonaws.com x-amz-date: 20130524T000000Z x-amz-storage-class: REDUCED_REDUNDANCY Authorization:SignatureToBeCalculatedx-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER Content-Encoding: aws-chunked x-amz-decoded-content-length: 66560 x-amz-trailer: x-amz-checksum-crc32c Content-Length: 66946<Payload>
下列步驟顯示簽章計算。
-
種子簽章 — 建立要簽署的字串
-
CanonicalRequest
PUT /examplebucket/chunkObject.txt content-encoding:aws-chunked host:s3.amazonaws.com x-amz-content-sha256:STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER x-amz-date:20130524T000000Z x-amz-decoded-content-length:66560 x-amz-storage-class:REDUCED_REDUNDANCY x-amz-trailer:x-amz-checksum-crc32c content-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class;x-amz-trailer STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER在正式請求中,第三行是空的,因為請求中沒有查詢參數。最後一行是做為雜湊承載值提供的常數字串,應該與 的值相同
x-amz-content-sha256 header。 -
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 44d48b8c2f70eae815a0198cc73d7a546a73a93359c070abbaa5e6c7de112559注意
如需有關要簽署之字串中每一行的資訊,請參閱說明種子簽章計算的圖表。
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
種子簽章
106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e -
授權標頭
產生的授權標頭如下所示:
AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=content-encoding;content-length;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class,Signature=106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e -
區塊 1:(65536 位元組,值 97 表示字母 'a')
-
要簽署的區塊字串:
AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 bf718b6f653bebc184e1479f1935b8da974d701b893afcf49e701f3e2f9f9c5a注意
如需有關要簽署之字串中每一行的資訊,請參閱上一個主題 (計算種子簽章) 中的圖表,其中顯示要簽署之字串的各種元件。例如,最後三行包含下列項目:
上一個簽章hash("")hash(current-chunk-data)
-
區塊簽章:
b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 -
已傳送的區塊資料:
10000;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 <65536-bytes>
-
-
區塊 2:(1024 個位元組,值 97 表示字母 'a')
-
要簽署的區塊字串:
AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a -
區塊簽章:
1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 -
已傳送的區塊資料:
400;chunk-signature=1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 <1024-bytes>
-
-
區塊 3:(0 位元組資料)
-
要簽署的區塊字串:
AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
區塊簽章:
2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992 -
已傳送的區塊資料:
0;chunk-signature=2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
-
-
區塊 4:追蹤標頭
-
要簽署的尾端區塊字串:
AWS4-HMAC-SHA256-TRAILER 20130524T000000Z 20130524/us-east-1/s3/aws4_request 2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992 1e376db7e1a34a8ef1c4bcee131a2d60a1cb62503747488624e10995f448d774注意
最後兩行是
previous-signature(0 位元組的資料區塊簽章)、hash(trailing-checksum-header-name:base64-encoded-trailing-checksum-value\n)。雜湊的計算方式如下,不含空格:
結尾檢查總和標頭名稱
冒號 (
:)base64 編碼的結尾檢查總和值
換行字元 (
\n)。
在此範例中,如果您使用
crc32c雜湊演算法,搭配 base64 編碼檢查總和值sOO8/Q==,您可以代表運算,如下所示:hash('x-amz-checksum-crc32c:sOO8/Q==\n')。 -
區塊簽章:
d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435 -
已傳送的區塊資料:
x-amz-checksum-crc32c:sOO8/Q== x-amz-trailer-signature:d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435
-