问题的根本原因是缓存导致的。304状态码表示资源未修改,浏览器从缓存中获取资源而不是从服务器上请求新的资源。这在Heroku上很常见,因为Heroku使用Varnish或其他缓存服务来提高性能。
要解决这个问题,可以尝试以下几种方法:
expires_in
方法来设置资源的过期时间。在相应的控制器或视图中添加以下代码:expires_in 1.hour, public: true
这将告诉浏览器在1小时内不要使用缓存的版本,而是从服务器上获取新的资源。
fresh_when
方法来检查资源是否已被修改,并在资源未修改时返回304状态码。在相应的控制器中添加以下代码:def show
@resource = Resource.find(params[:id])
fresh_when last_modified: @resource.updated_at.utc, public: true
end
这将根据资源的最后修改时间来判断是否返回304状态码。
这将告诉浏览器不要缓存页面。
通过以上方法,您应该能够解决Heroku上服务器状态为304的问题。