我正在使用API网关在Elastic BeansTalk中解耦我的Tomcat后端,但是我无法从API获得响应。
当我尝试使用API Gateway控制台进行测试时,集成请求正常。它在后端工作正常。我使用API端点发出请求并检查服务器日志,它给出了预期的200响应。
但是,当API网关为代理提供响应时,无法在任何客户端中解析它。我尝试使用Web浏览器,API测试工具和移动客户端(iOS)。在每种情况下,代理都会告诉他“无法解码原始数据”!我使用curl检查了端点,它工作正常。比较来自API Gateway和Elastic BeansTalk端点的响应,唯一的区别是在API网关响应中,通知的Content-Size长一个字节。
做一些研究,网上的一些人发现同样的问题,不同的后端服务和不同的代理。例如,当Safari试图访问Flickr时,here有人讲述了同样的问题。在这个问题的回答中,有人告诉问题与服务器插入的Http Via标题有关。
我检查了API网关的响应头,实际上它有一个Via Header,通知Cloudfront提供了响应。我查找了禁用此选项的选项,以测试这是否是问题所在。但没找到!
那么..我的问题是:
我可以在API网关中禁用此标头吗?如果是的话,怎么样?
不幸的是,您无法禁用标头。如果你使用REGIONAL
端点类型(而不是EDGE
),那么不会添加Via头,但是你也失去了EDGE
端点的好处。