【发布时间】:2016-08-27 03:12:39
【问题描述】:
我正在尝试通过 GPRS AT-Commands 调用已部署的 API。我可以进行 HTTPS 调用,例如在 https://www.amazon.jobs/ 上执行 GET 会得到 200 和很大的响应。但是,我尝试在部署的 API 上执行类似操作,但最终收到 601 错误,这只是 GPRS 的“网络错误”。
API 通过我的浏览器甚至命令提示符中的 Python 单行代码运行。我认为它可能与证书或标题或许多其他事情有关,但我不确定。 GET 到 API Gateway 与例如 GET 到其他 Amazon URL(如 amazon.jobs)有什么区别?更好的主意是创建一个可以构建对 API 网关的成功调用的中间端点?
【问题讨论】:
-
可能只是设置了 APIGateway/域,而 DNS 尚未传播。无论如何,您应该跟踪请求(您可以发布
curl -v $your_API_gateway返回的内容吗?)以更好地了解阻塞点在哪里。 API 端点是否返回 HTTP 601?你能检查 API 端点日志吗? -
我不能使用
curl,因为 GPRS 是 Arduino 的模块,所以我看不到它在哪里跳闸。然而,它确实表明 SSL/TLS 版本不是问题。关于日志的公平点,不幸的是我必须等待其他人添加 CloudWatch 日志记录,因为我在我们的帐户中没有权限。我会尽快更新。 -
API 网关需要与支持服务器名称指示符 (SNI) 的客户端建立 https 连接。检查您的 GPRS 模块的文档以确保它支持 https 和 SNI。
-
感谢@MikeDatAWS。鉴于 SNI 是 TLS 的扩展,我不相信它与 SIM900 GPRS 模块的功能捆绑在一起。除了让 EC2 实例完成所有工作之外,您知道解决此问题的任何方法吗?
-
在没有 SNI 的情况下使用 API Gateway 没有很好的选择。您可以将 CloudFront 分配放在 API 前面,并启用 CloudFront 对专用 IP 的支持,从而无需 SNI。这是一个相当昂贵的选择,每月 600 美元。在 ELB 后面设置多个 EC2 实例会更便宜。
标签: amazon-web-services aws-api-gateway gprs