You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java HttpsURLConnection调用Amazon FSx DescribeFileCaches API遇404错误求助

问题排查与修复建议

1. 核心错误:x-amz-target 值不正确

你当前使用的 AWSSimbaAPIService_v20180301.DescribeFileCaches 是Amazon Redshift相关服务的目标标识,并非FSx服务的正确值。FSx的DescribeFileCaches API对应的正确x-amz-target应为:

String target = "AmazonFSx20180301.DescribeFileCaches";

UnknownOperationException 错误几乎都是因为目标操作名称不匹配导致的,这是最可能的根因。

2. 移除手动设置的content-length头

手动指定content-length为"2"存在风险:如果后续payload内容变化、或编码方式(如非UTF-8编码)导致实际字节数与设定值不一致,会触发服务器解析错误或签名验证失败。HttpsURLConnection会自动计算并设置正确的Content-Length,直接删除这行代码即可:

// awsHeaders.put("content-length", "2"); // 移除该行

3. 确保所有请求头都参与AWS V4签名

你在代码中额外添加了Accept: application/json头,但这个头未加入用于签名的awsHeaders集合。AWS V4签名要求所有发送的请求头(除少数默认忽略的)都必须参与签名计算,否则会导致签名验证失败。需将Accept头加入awsHeaders:

awsHeaders.put("Accept", "application/json");

同时删除后续单独设置Accept的代码行:

// httpsURLConnection.setRequestProperty("Accept", "application/json"); // 删除该行

4. 验证自定义AWSV4Auth类的签名逻辑

如果上述修改后仍有问题,需检查你使用的AWSV4Auth类实现是否符合AWS V4签名规范:

  • 确认Canonical Headers按名称字典序排列(你用了TreeMap,这部分是正确的)
  • 确认Payload的SHA-256哈希计算正确,空payload{}的哈希值应为e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  • 确认签名时自动添加了x-amz-date头等必要参数

修改后的关键代码片段

TreeMap<String, String> awsHeaders = new TreeMap<String, String>();
awsHeaders.put("content-type", "application/x-amz-json-1.1");
awsHeaders.put("host", "fsx.us-east-1.amazonaws.com");
// 使用正确的x-amz-target值
String target = "AmazonFSx20180301.DescribeFileCaches";
awsHeaders.put("x-amz-target", target);
// 将Accept头加入签名用的headers集合
awsHeaders.put("Accept", "application/json");

// 后续签名和请求代码保持不变,移除单独设置Accept的行

内容的提问来源于stack exchange,提问作者Meiruko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:10:57