【问题标题】:Cloudfront & Cloudflare 403 errors when loading assets from subdomain从子域加载资产时出现 Cloudfront 和 Cloudflare 403 错误
【发布时间】:2016-06-08 08:13:18
【问题描述】:

我们有一个在 heroku 上运行的 Rails 应用程序,我们通过云端分发其资产作为我们的第一个 CDN。
该网站可以直接从其cloudfront url访问。
该应用程序从在 blog 子域上的单独服务器上运行的 wordpress 实例中提取外部图像,该子域使用 cloudflare 作为 DNS 提供程序。
只要从 https://[redacted].cloudfront.net 的云端 URL 访问该网站,外部资产就可以正常加载。

https://[redacted].cloudfront.net/blog/1192 从我们的 wordpress 实例中嵌入图像。

这里是相关的请求头:

GET /wp-content/uploads/2016/02/69blog-1-1024x604.jpg HTTP/1.1
Host: blog.meinbge.de
Connection: keep-alive
Cache-Control: max-age=0
Accept: image/webp,image/*,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.54 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
If-None-Match: "1fd6f-52be33056b1af"
If-Modified-Since: Tue, 16 Feb 2016 13:34:12 GMT

以及回应:

HTTP/1.1 304 Not Modified
Date: Thu, 25 Feb 2016 13:33:11 GMT
Server: Apache/2.4.7 (Ubuntu)
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
ETag: "1fd6f-52be33056b1af"

如您所见,我们在资源上获得了HTTP/1.1 304 Not Modified 状态。

现在,尝试从同样由 cloudfront 管理的站点适当的 tld 请求相同的资产,我们观察到在对外部资源的请求中引入了引用标头:

GET /wp-content/uploads/2016/02/69blog-1-1024x604.jpg HTTP/1.1
Host: blog.meinbge.de
Connection: keep-alive
Cache-Control: max-age=0
Accept: image/webp,image/*,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.54 Safari/537.36
Referer: http://heroku.mein-grundeinkommen.de/blog/1192
Accept-Encoding: gzip, deflate, sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4

由于Referer: http://heroku.mein-grundeinkommen.de/blog/1192的请求头注入我们在加载外部资源时得到403错误:

HTTP/1.1 403 Forbidden
Date: Thu, 25 Feb 2016 13:45:42 GMT
Server: Apache/2.4.7 (Ubuntu)
Content-Length: 250
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

我们怀疑 referer 标头是由 cloudflare 引入的,但不确定如何删除它。
问题:我们如何从 HTTP 请求中删除上述请求标头?

【问题讨论】:

    标签: dns cdn amazon-cloudfront cloudflare


    【解决方案1】:

    Referer 是浏​​览器添加的标准做法。在您的情况下,它很可能不会被添加,因为您正在从非安全路径加载资产。出于安全原因,在这种情况下不会添加 Referer 标头,因为这会清楚地揭示客户端正在安全访问的页面是什么。

    您是否有机会在 CloudFlare 中使用 SSL/TLS?因为这可能是导致添加Referer标头的触发器。

    【讨论】:

    • 是的。我们确实在 cloudflare 上使用 ssl,在 heroku 上使用 ssl 端点。
    • 您的示例 URL d1rm3nbxa795it.cloudfront.net 通过 HTTP 加载其资产,这意味着未发送Referer
    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2015-04-24
    相关资源
    最近更新 更多