API网关GET和POST被缓存 - 怀疑是CORS问题

时间:2016-12-08 04:47:31

标签: amazon-web-services cors aws-api-gateway

我在我的AWS API网关中创建了一堆API资源 - 这些资源都运行良好。

我还将定义导出到SwaggerUI以获取一些用户文档和测试。

我已经在所有通话中启用了CORS,并且每次通话都按预期工作。

我刚刚意识到的问题是 - 通过swagger / Postman如果我用GET方法调用某个端点(比如说https://apiserver/api/helloWord),它工作正常,然后立即将调用更改为POST如果我等了5到10分钟就失败了 - 如果我等了5到10分钟,那么POST就会起作用,而GET会失败......这几乎就像选择方法被缓存一样(不确定)。

我尝试在我的Options方法中添加一些标题(包括Access-Control-Max-Age,Cache-Control,Expiry等),但没有运气。

每个API调用都会接受一个API密钥和一个Authtoken - 它适用于第一次调用(如果它的方法相同,则适用于所有其他调用),直到我更改方法。

通过API网关测试完成这项工作非常正常 - 尽管他们不使用选项(通过Fiddler注意到),只要我使用Swagger UI或邮递员测试呼叫,就会出现此问题。

Fiddler日志并不是很有用,因为它显示每个调用获取选项然后路由到GET或POST方法 - 数据看起来都很好。

请问任何想法?

1 个答案:

答案 0 :(得分:2)

您使用的是自定义授权程序吗?如果是这样,您应该尝试将缓存TTL设置为0并再次测试。如果这样可以解决问题,则必须修复从授权程序生成的策略。

授权人的政策已在整个API 中缓存。因此,如果您发送的策略只允许调用的方法(比如调用GET并且您发送了允许GET方法的策略),那么当您调用POST方法时,您将得到403.您应该构建客户端令牌的授权者中的全局策略。然后,使用相同令牌在整个API中进行的任何调用都不必返回Lambda函数,这样可以节省资金和延迟。