Cloudfront 返回 401 以响应请求

Cloudfront returning 401 in response to requests

我有一个 rails 应用程序使用 cloudfront 作为资产主机。一切都很好,除了字体。为了让浏览器从云端提取缓存的字体,我使用了 font_assets gem。不幸的是,这不是我希望的灵丹妙药。

在 config/environments/production.rb 中,我有这个

config.font_assets.origin = 'https://www.MyURL.com'

我也将 force_ssl 设置为 true。

当我卷曲其中一种字体时,这就是我所看到的。

$ curl -i https://**<mycloudfront domain name>**/assets/opensans-regular-webfont-debcfe09b9fe1d259815c339e9ef4a9f.woff 
HTTP/1.1 401 Unauthorized
Content-Type: application/font-woff
Content-Length: 0
Connection: keep-alive
Server: Cowboy
Strict-Transport-Security: max-age=31536000
WWW-Authenticate: Basic realm=""
Cache-Control: no-cache
X-Request-Id: f1215a95-603c-4b8a-acc9-077a292ee538
X-Runtime: 0.006937
Access-Control-Allow-Origin: https://<**Origin Domain Name**>
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: x-requested-with
Access-Control-Max-Age: 3628800
Date: Mon, 23 Nov 2015 05:23:18 GMT
X-Rack-Cache: miss
Via: 1.1 vegur, 1.1 87a5dc4906ffb6323c3ec65df37e46f1.cloudfront.net (CloudFront)
Vary: Accept-Encoding
X-Cache: Error from cloudfront
X-Amz-Cf-Id: 8EQxf_pJ-fAiEis8ztx9icjRbFy5CWPn_ccOFO-WjzgICN-_NSOing==

我很困惑为什么我会收到 401,因为源域列在云端源中。

知道我做错了什么吗?

您的网站是否同时使用 http 和 HTTPS?在这种情况下,CDN 将缓存第一个请求及其方案。如果第一个请求是通过 http,即使配置在 Cor 中,所有 HTTPS 也会被忽略。我建议选择一个并使 CDN 缓存无效,然后看看情况如何。

如果您将 cloudfront 中的行为设置为转发原点 header,那么 cloudfront 将为 http 和 HTTPS 缓存不同的副本,因此适用于这两种方案。但是这个性能比较差。