当前位置: 首页 > 知识库问答 >
问题:

AWS API网关GET响应始终缓存

轩辕佑运
2023-03-14

更新:我知道了,请看下面的答案。

我有一个AWS API网关api,定义了各种资源和各种GET和POST方法

一切都很好。帖子正在通过。GET返回一个响应(JSON有效载荷),但返回的值似乎是缓存的值。

我的GET api调用一个Lambda函数,该函数调用对RDS的查询。我可以确认我的回答是过时的,因为:

  • 当我手动查询RDS时,我会得到更新后的值

它确实刷新过一次,但我认为那是因为我越过了一些(比如1小时)缓存阈值什么的。

我知道API网关在幕后生成了一个CloudFront。我觉得缓存就是这样做的。但那只是猜测,我没有证据。也许是某种默认的缓存TTL?

显然,我已经在API网关阶段关闭了缓存。我甚至尝试启用它,将TTL设置为1,刷新缓存,然后再次禁用缓存。测试的每个阶段仍然返回过时的值。

我不知道是否相关,但补充细节:

  • 我启用了CORS ("*")
  • 我启用了Cognito授权程序
  • 我通过授权头传递JWT令牌(这一切都工作正常)

是否应该传递一些头来请求未缓存的值?我去了CloudFront,但这里没有配置。

关于API网关缓存的所有其他帖子似乎都是关于缓存不起作用或人们询问缓存密钥特异性的。我没有看到任何关于值总是被缓存无论如何。所以我觉得我错过了一些明显的东西...

任何帮助或调试提示都将不胜感激!

共有2个答案

龙星辰
2023-03-14

感谢您提出并回答您自己的问题。我也遇到了同样的问题,正在努力找出哪个API网关设置正在缓存结果。

司空丰
2023-03-14

好吧,所以我觉得回答自己的问题像个白痴,但希望有一天它能帮助到某人。

这不是API网关缓存问题。问题是pymysql连接

我的Lambda使用pymysql查询MySQL数据库。根据推荐的性能原因,我在lambdas上重新使用了连接(这意味着我没有每次都关闭连接)。

解决方案是html" target="_blank">调用conn.commit()

在我取完东西后

发生的事情是,我随后的调用返回缓存的查询结果(称为一致读取)。谢谢!@michael-sqlbot)我相信我可能有不止一个lambda容器或其他东西,所以当我有一段时间不活动(即忙着阅读stackoverflow帖子)时,lambda会卸载。然后,我的下一次API网关尝试将重新初始化一个新的lambda处理程序,并创建一个分支新连接(没有缓存)。所以这就是为什么它似乎“有时工作,然后停止”。

如果我浪费了任何人的时间,我道歉。

 类似资料:
  • 我们正在尝试从C#Windows服务调用AWS API网关来执行后台作业。哪个应该触发API网关定期初始化请求? 我们使用RestSharp调用APIendpoint,该类称为AwsAuthenticator,它继承自RestSharp.Authenticators.IAAuthenticator。但当我们调用API Gateway时,收到的错误是“我们计算的请求签名与您提供的签名不匹配。请检查您

  • 我正在建立一个新的android项目并使用改版,我的改版功能在模拟器(NOX)和邮递员中正常工作,但是当我尝试在移动设备中构建我的应用程序时,改版总是陷入失败,有人能给我解决方案吗?我的API发布在公共主机上, 这就是我所说的改装 我的回应 这是我的邮差回复

  • 我还没有完全理解.NETMVC的HTTP缓存是如何工作的,因为它看起来并不像是在实际检索缓存的资源文件。我想我需要在某处添加一些额外的代码。。。 首先,让我们看看我是如何在静态内容(即图像)上设置HTTP缓存的。在我的网络中。config,我有以下内容: 这会导致我的应用程序中的图像看起来缓存正确。当我查看图像的响应标头时,我看到以下内容(删除了不必要的标头): 我看到一个很好的ETag值,我的过

  • 我希望能够创建一个自定义的AngularJS服务,当其数据对象为空时发出HTTP“GET”请求,并在成功时填充数据对象。 下一次调用此服务时,我希望绕过再次发出HTTP请求的开销,而是返回缓存的数据对象。 这可能吗?

  • 问题内容: 我正在尝试使用jQuery和JSON执行一些基本操作。目前,jQuery在从我的游戏框架应用程序接受JSON响应方面遇到困难。下面是仍然会产生错误的代码的简化版本。 错误回调总是被触发。它显示 错误…未调用parsererror jQuery15001997238997904205_1298484897373 通过Firebug检查返回的JSON不会显示任何错误,并且各种JSON li

  • 遵循本课程https://www.pluralsight.com/courses/angular-2-getting-started和github材料产品。服务试图避免调用http。每次单击链接时都会请求get()。我认为每次加载文件而不是将其保存为内存中的对象是一种很大的浪费。 正在尝试替换此代码: 用这个: 如果被低估,则永远不应调用此行 但它被称为!!!! 在镀铬控制台中: 最后一行不应该出