Heroku 有反向代理缓存吗?

Does Heroku have reverse proxy cache?

我制作了一个简单的应用程序,它设置 Cache-Control: public, immutable, max-age=3600 作为响应 headers。此应用故意放慢(休眠 2)以重现该问题。

我的目标是了解我是否可以使用 Heroku 对来自我的慢速(与缓存服务器相比)源 Heroku 应用程序的 API 响应进行短期 HTTP 缓存。

据我所知,我的 Heroku 应用程序前面没有 Heroku 的任何类型的 HTTP 缓存。

实际行为:

每个请求都会命中 origin/Heroku 应用程序:

$ curl https://cachecontroltest123.herokuapp.com/ --head
HTTP/1.1 200 OK 
Connection: keep-alive
Cache-Control: public, immutable, max-age=3600
Content-Type: text/html;charset=utf-8
Content-Length: 12
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Server: WEBrick/1.4.2 (Ruby/2.6.6/2020-03-31)
Date: Sat, 24 Oct 2020 09:28:51 GMT
Via: 1.1 vegur

预期行为:

在第一个请求之后,Heroku 必须缓存响应,并在接下来的一个小时内提供它,而不会触及(慢)源。

我可以在 Whosebug 上找到一些相关问题,每个问题都说 Heroku 在每个应用程序前面都有一个 Varnish HTTP 缓存服务器集群,但这些答案已经很老了。 从那以后有什么变化吗?

Heroku 不做任何 HTTP 缓存。

这个任务要么在你的应用程序中完成(在 dyno 中,通过你的框架或类似 Varnish/Nginx 的东西), 或者对于更重的负载,通过放在 Heroku 应用程序前面的 CDN (Fastly, CloudFront, Cloudflare)。

还有 Edge Heroku add-on 可以简化 AWS Cloudfront 配置。