generateCanonicalHeaders method

String generateCanonicalHeaders(
  1. Map<String, String> headers
)

Generate the canonical headers for the request.

参与签名的头部信息,至少包含 host 和 content-type 两个头部,也可加入其他头部参与 签名以提高自身请求的唯一性和安全性,此示例额外增加了接口名头部。

拼接规则: 头部 key 和 value 统一转成小写,并去掉首尾空格,按照 key:value\n 格式拼接; 多个头部,按照头部 key(小写)的 ASCII 升序进行拼接。

此示例计算结果是 content-type:application/json; charset=utf-8\nhost:cvm.tencentcloudapi.com\nx-tc-action:describeinstances\n。 注意:content-type 必须和实际发送的相符合,有些编程语言网络库即使未指定也会自动添加 charset 值,如果签名时和发送时不一致,服务器会返回签名校验失败。

https://cloud.tencent.com/document/api/382/52072#1.-.E6.8B.BC.E6.8E.A5.E8.A7.84.E8.8C.83.E8.AF.B7.E6.B1.82.E4.B8.B2

Implementation

String generateCanonicalHeaders(Map<String, String> headers) {
  final entries = headers.entries
      .map((e) => MapEntry(e.key.toLowerCase(), e.value.toLowerCase()))
      .toList()
    ..sort((a, b) => a.key.compareTo(b.key));

  return '${entries.map((e) => '${e.key}:${e.value}').join('\n')}\n';
}