Header中包含签名 StringToSign StringToSign中不包含ContentType, Date, ContentMD5这些请求头的名字,只包含这些请求头的值。但是以“xamz”开头的请求头的名字和值都包含在StringToSign中。 如果在请求中,ContentType, ContentMD5等请求头不存在,那么该位置用空串("")来代替。 时间戳说明 在签名时必须使用时间戳,可以用HTTP的Date请求头,也可以用xamzdate请求头。时间戳中的时间和OOS的系统时间不能相差15分钟以上,否则,OOS会返回错误码RequestTimeTooSkewed。 有些HTTP客户端不能设置Date请求头,如果你在签名时设置Date请求头有困难,那么你可以使用xamzdate请求头来传送时间戳。xamzdate请求头需要符合RFC 2616 的格式 。当请求中包含xamzdate头时,OOS在计算签名时会忽略Date头。所以如果请求中有xamzdate头,在客户端计算签名时,Date头的值应设置为空串。 构建CanonicalizedAMZHeaders的方法 所有以“xamz”为前缀的HTTP Header被称为CanonicalizedAMZHeaders。它的构建方法如下: 1. 将所有以“xamz”为前缀的HTTP请求头的名字转换成小写字母。如’XAMZMetaName: fred’转换成’xamzmetaname: fred。 2. 将上一步得到的所有HTTP请求头按照字典序进行升序排列。 3. 如果有相同名字的请求头,则根据标准RFC 2616, 4.2章进行合并(两个值之间只用英文逗号分隔)。如有两个名为'xamzmetaname'的请求头,对应的值分别为'fred'和'barney',则合并后为:'xamzmetaname:fred,barney'。 4. 删除分隔符(:)两端和值两端出现的任何空格。如'xamzmetaname : fred '转换成:'xamzmetaname:fred'。 5. 将所有的头和内容用’n’分隔符分隔拼成最后的CanonicalizedAMZHeader。