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

AWS CloudFront API浏览器可正常访问 .NET HttpClient请求报403错误

问题成因分析

1. 请求方法与载荷不匹配

浏览器侧正常请求是GET方法,而你的.NET代码无论传入什么请求方法,都强制为请求设置了newRequest.Content请求体。按照HTTP规范GET请求不应携带请求体,CloudFront绑定的WAF规则通常会直接拦截携带请求体的GET请求,返回403错误。

2. 必要请求头缺失

浏览器请求携带了多类CloudFront/WAF校验需要的头字段,你的.NET代码仅设置了Accept头,缺少以下关键校验项,触发合法性校验拦截:

  • User-Agent:多数CloudFront分发会校验合法UA标识,未手动设置时HttpClient自带的默认UA很容易被识别为非浏览器请求拦截
  • Accept-Encoding、Accept-Language:部分WAF规则会校验这两个头的存在性与合法性,缺失会被判定为异常请求
  • 业务会话Cookie:浏览器请求携带了AWSALB、AWSALBCORS以及站点会话Cookie,你的代码完全未携带这类会话凭证,无法通过服务端的身份校验

3. 代码逻辑错误

你提供的代码存在两处明显逻辑问题:

  • 声明的客户端变量为clientNew,但设置超时的时候调用的是未声明的client变量,超时设置完全不生效,若实际运行代码确实存在该问题,可能导致请求异常参数传递错误
  • 直接调用response.Result同步等待异步请求,高并发场景下会引发线程死锁,虽然不会直接导致403,但可能引发请求异常触发拦截规则

4. CloudFront WAF规则拦截

CloudFront通常会绑定WAF防护规则,会对请求特征做多重校验:

  • 你的应用服务器出口IP可能被WAF加入了拦截黑名单
  • 请求特征与正常浏览器差异过大,触发了WAF的爬虫拦截规则
  • URL中的特殊字符未做正确编码,触发非法请求拦截规则

5. TLS握手异常

虽然你设置了支持多版本TLS协议,但部分CloudFront分发仅支持特定的TLS加密套件,若.NET HttpClient默认的加密套件不在CloudFront支持列表内,会导致TLS握手失败被判定为非法请求,返回403。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:57:02