如何记录和查看AWS Java SDK发送的HTTP(S)请求
监测AWS Java SDK与服务端交互协议的方案
1. 启用SDK内置HTTP日志直接校验
这是最便捷的方案,不需要额外工具,直接通过Spring Boot日志配置就能看到完整请求信息:
- 如果你使用AWS Java SDK V2版本,在
application.properties/application.yml中添加如下配置:# 开启SDK核心HTTP请求日志 logging.level.software.amazon.awssdk.http = DEBUG # 如果你用的是Apache同步HTTP客户端,加这行打印请求明细 logging.level.org.apache.http = DEBUG # 如果你用的是Netty异步HTTP客户端,加这行打印请求明细 logging.level.io.netty.handler.codec.http = DEBUG - 如果你使用AWS Java SDK V1版本,添加如下配置:
logging.level.com.amazonaws.http = DEBUG logging.level.org.apache.http.wire = DEBUG
开启后日志会打印完整的请求URL、协议、端口信息,你可以直接确认请求前缀是否为https://、目标端口是否为443,就能验证S3等操作是否全程走HTTPS。
2. 全局强制SDK仅使用HTTPS(主动规避HTTP风险)
除了被动校验,你可以直接在客户端配置层面强制所有请求走HTTPS,从根源避免HTTP请求产生:
- V2版本SDK客户端配置示例:
S3Client s3Client = S3Client.builder() .region(Region.of("你的区域ID,比如cn-north-1")) // 强制指定HTTPS协议的端点 .endpointOverride(URI.create("https://s3.cn-north-1.amazonaws.com.cn")) .build(); - V1版本SDK客户端配置示例:
ClientConfiguration clientConfig = new ClientConfiguration(); // 全局强制使用HTTPS协议 clientConfig.setProtocol(Protocol.HTTPS); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion("你的区域ID") .withClientConfiguration(clientConfig) .build();
3. 抓包做终极校验
如果需要更直观的链路验证,可以用抓包工具确认流量情况:
- 用Wireshark设置过滤规则
tcp.port == 443 and host 你的AWS服务端点域名,就能看到应用和AWS服务之间的所有流量,确认没有80端口的HTTP流量产生。 - 也可以在Java启动参数中配置代理,把请求转发到Charles/Fiddler这类代理工具中,查看完整的请求链路协议。
补充说明:AWS Java SDK 1.11.x及以上版本、所有2.x版本默认访问所有AWS服务都会走HTTPS,只要你没有主动配置HTTP开头的自定义端点,默认不会产生HTTP请求。
内容的提问来源于stack exchange,提问作者Davis Ward
相关产品推荐
相关产品推荐

