Heroku是否有反向代理缓存?

问题描述

我制作了一个简单的应用,该应用在响应标题中设置了Cache-Control: public,immutable,max-age=3600。此应用故意过慢(睡眠2)来重现该问题。

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

从我所见,Heroku在我的Heroku应用程序之前没有任何HTTP缓存。

实际行为:

每个请求都点击来源/ Heroku应用:

$ curl https://cachecontroltest123.herokuapp.com/ --head
HTTP/1.1 200 OK 
Connection: keep-alive
Cache-Control: public,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必须缓存响应,并在接下来的一个小时内投放响应,而不会遇到(缓慢的)起源。

我可以在Stackoverflow上找到一些相关的问题,每个问题都说Heroku在每个应用程序的前面都有一簇Varnish HTTP缓存服务器,但是答案很旧。 从那以后有什么改变吗?

解决方法

Heroku不执行任何HTTP缓存。

此任务可以在您的应用程序中完成(在dyno中,通过您的框架或Varnish / Nginx之类的东西), 或更重的负载,您可以将CDN放在Heroku应用程序的前面(FastlyCloudFrontCloudflare)。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...