【发布时间】: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