Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku Cloudfront和CSS/JS资产_Heroku_Cdn_Amazon Cloudfront - Fatal编程技术网

Heroku Cloudfront和CSS/JS资产

Heroku Cloudfront和CSS/JS资产,heroku,cdn,amazon-cloudfront,Heroku,Cdn,Amazon Cloudfront,我已经设置了cloudfront发行版,可以访问myapp.herokuapp.com 也许我一般误解了Cloudfront和CDN,但我认为CDN托管了静态文件,而不是我,只是在Heroku上存储的HTML文件中包含对CDN URL的引用。我在Chrome网络选项卡中看到的是: 请求URL: 请求方法:获取状态代码:301永久移动 然后: 请求URL: 请求方式:获取状态代码:304未修改 有没有另一种方法来设置Cloudfront,使对这些静态文件的请求根本不会击中我的Heroku节点?你看

我已经设置了cloudfront发行版,可以访问myapp.herokuapp.com

也许我一般误解了Cloudfront和CDN,但我认为CDN托管了静态文件,而不是我,只是在Heroku上存储的HTML文件中包含对CDN URL的引用。我在Chrome网络选项卡中看到的是:

请求URL:

请求方法:获取状态代码:301永久移动

然后:

请求URL:

请求方式:获取状态代码:304未修改


有没有另一种方法来设置Cloudfront,使对这些静态文件的请求根本不会击中我的Heroku节点?

你看过这篇文章吗?它非常详细地介绍了这个主题

但听起来你并没有误解


如果你看到的是检查员,你不应该看到请求进入你的herokuapp。假设您已将所有资产配置为从cloudfront URL加载,那么当从该URL请求资产时(如果cloudfront尚未缓存该资产),cloudfront将从您的herokuapp中获取该资产,然后将其返回,但您不会在浏览器检查器中看到这一点。下一次请求相同资产时,它将从cloudfront获得服务。

我遇到了与cookiemonster相同的问题。我能够让Cloudfront使用asset_sync gem,但不是根据Heroku的文章

我正试图从asset_sync切换,因为(1)它增加了复杂性,(2)Heroku不再推荐它

从我下面的回复中,您可以看到Amazon为每个呼叫发出301重定向

以下是登台服务器的一些详细信息:

我的整个网站都是https

Request URL:https://d2gfgnx4lxlciz.cloudfront.net/assets/jquery-20129d378db54e4ede9edeafab4be2ff.js
Request Method:GET
Status Code:301 Moved Permanently
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh-TW;q=0.4
Cache-Control:no-cache
Connection:keep-alive
Cookie:optimizelyEndUserId=oeu1387769272844r0.715743659529835; optimizelySegments=%7B%7D; optimizelyBuckets=%7B%7D
Host:d2gfgnx4lxlciz.cloudfront.net
Pragma:no-cache
Referer:https://sohelpfulme-staging.herokuapp.com/testuser
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
Response Headersview source
Age:32
Connection:keep-alive
Content-Type:text/html
Date:Mon, 17 Feb 2014 22:43:36 GMT
Location:https://sohelpfulme-staging.herokuapp.com/assets/jquery-20129d378db54e4ede9edeafab4be2ff.js
Status:301 Moved Permanently
Strict-Transport-Security:max-age=31536000
Transfer-Encoding:chunked
Via:1.1 16fab6bd7655623b4e7dcaf090973fc8.cloudfront.net (CloudFront)
X-Amz-Cf-Id:oiKeV-b3OrhbtkjXrMtyNI9EMvydfdnZ8Drp2fxojNHiveqBNsttJA==
X-Cache:Hit from cloudfront
X-Rack-Cache:miss
My staging.rb

config.action_controller.asset_host = "https://d2gfgnx4lxlciz.cloudfront.net"
Cloudfront

我使用了通用配置,只更改了原点:

Domain Name: d2gfgnx4lxlciz.cloudfront.net
Origin: sohelpfulme-staging.herokuapp.com
Delivery Method: Web
CNAMEs: none
HTTP头文件

Request URL:https://d2gfgnx4lxlciz.cloudfront.net/assets/jquery-20129d378db54e4ede9edeafab4be2ff.js
Request Method:GET
Status Code:301 Moved Permanently
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh-TW;q=0.4
Cache-Control:no-cache
Connection:keep-alive
Cookie:optimizelyEndUserId=oeu1387769272844r0.715743659529835; optimizelySegments=%7B%7D; optimizelyBuckets=%7B%7D
Host:d2gfgnx4lxlciz.cloudfront.net
Pragma:no-cache
Referer:https://sohelpfulme-staging.herokuapp.com/testuser
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
Response Headersview source
Age:32
Connection:keep-alive
Content-Type:text/html
Date:Mon, 17 Feb 2014 22:43:36 GMT
Location:https://sohelpfulme-staging.herokuapp.com/assets/jquery-20129d378db54e4ede9edeafab4be2ff.js
Status:301 Moved Permanently
Strict-Transport-Security:max-age=31536000
Transfer-Encoding:chunked
Via:1.1 16fab6bd7655623b4e7dcaf090973fc8.cloudfront.net (CloudFront)
X-Amz-Cf-Id:oiKeV-b3OrhbtkjXrMtyNI9EMvydfdnZ8Drp2fxojNHiveqBNsttJA==
X-Cache:Hit from cloudfront
X-Rack-Cache:miss

这发生在我安装SSL时。为了修复它,我删除了cloudfront上的通讯组,创建了一个新的通讯组,并使用新的cloudfront子域再次滚动应用程序。一旦我这么做了,它就不再在我的应用程序中添加301了。

这很奇怪,但是在cloudfront url中添加了一个“/”为我修复了这个问题:


config.action\u controller.asset\u host=”https://d2gfgnx4lxlciz.cloudfront.net/“

对我来说,这是一个分发配置的问题。 为未来的谷歌搜索者提供一份关于这个问题的快速清单:

  • HTTPS站点:如果您的网站是HTTPS,请确保您的网站在rails配置中包含协议
  • config.action\u controller.asset\u host=''

    在分发中,应将设置源协议策略设置为

    匹配查看器

    我还将查看器协议策略设置为

    将HTTP重定向到HTTPS

  • 如果提供字体,您还需要选择转发标题白名单并包含这些标题
  • 访问控制允许源

    访问控制允许方法

    访问控制允许标头

    访问控制最大年龄

  • 对于firefox请确保将允许的HTTP方法设置为
  • 获取、头、选项、放置、发布、修补、删除

    您可以使用

    curl-I


    这里也有同样的问题。我能够让它与asset_sync gem一起工作,但由于Heroku不再推荐它,我尝试使用这种方法。我也得到301重定向。有什么办法吗?没有,还没想好,也许我会开始悬赏。太好了。我还联系了Heroku的支持部门,他们通常反应很好。真的很奇怪。你的url看起来像:别问我为什么,但它是有效的。忘了提一下,我没有使用S3存储桶,我让我的Heroku应用程序提供第一个实例,CloudFront从那里缓存它,就像Heroku建议Sturns我们的301是用来缓存一个301的。我们的站点仅使用SSL,最初我们将“源协议策略”设置为“HTTP”,而不是“匹配视图”。当CloudFront第一次访问heroku站点时,应用程序重定向到HTTPS,HTTPS创建缓存301。在CloudFront控制台中将“原始协议策略”设置为“匹配视图”,并在application.rb文件中更新资产版本才是真正的解决方案。
    config.action\u controller.asset\u host
    不应包含
    http | | https
    前缀,它将自动追加。我还建议在您的环境变量中设置它,以便于修改。