亚马逊会将自定义标头传递给原产地

时间:2013-08-06 09:31:59

标签: http-headers amazon-cloudfront

我正在使用CloudFront向亚马逊以外的托管服务提出请求。该服务受到保护,我们希望调用我们服务的应用程序可以传递“Authorization”标头。

我们已尝试从Cloud Front调用我们的服务,但看起来标题正被云前端删除。因此,服务拒绝请求,客户端获得401禁止响应。 对于一些不需要授权的静态请求,我们没有收到任何错误,并且正在从CloudFront获得适当的响应。

我已经浏览过CloudFront文档,并且没有关于如何处理标头的特定信息,因此希望它们将按原样传递,但看起来并非如此。您的任何指导?

5 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

CloudFront默认会删除授权标头,并且不会将其传递给原始文件。

如果您希望将某些标头发送到原始广告,您可以在CloudFront->行为设置 - >转发标头下设置标题列表白名单。只需选择您要转发的标题,CloudFront即可为您完成工作。我已经通过这种方式对我们的一个基于位置的服务进行了测试,它就像一个魅力。

我需要验证的一件事是,Authorization标头是否会包含在缓存密钥中,是否可以安全地执行此操作?这也是你可能需要注意的事情。

答案 2 :(得分:0)

除了在“原点行为”部分下指定它们之外,您还可以向原始配置添加自定义标头。在AWS documentation for CloudFront custom headers

  

如果查看者请求中尚未显示您指定的标题名称和值,CloudFront会添加它们。如果存在标头,CloudFront会在将请求转发到源之前覆盖标头值。

这样做的好处是,您可以使用全部/通配符设置将行为部分中的标题列入白名单。

答案 3 :(得分:-1)

听起来您正在尝试从CloudFront提供动态内容(至少在经过身份验证的用户与未经身份验证的用户的内容不同的意义上),这实际上并非如此。

CloudFront是一个内容分发网络(CDN),用于在分布式边缘服务器上缓存内容,以便在您的客户端附近提供数据,而不是每次都访问您的服务器。

如果页面定期更改,您可以将CloudFront配置为短时间缓存页面,并且有一些用例值得(例如,您想要“微缓存”以减少服务器负载的高容量网站)但是它听起来这不是你尝试使用它的方式。

在您描述的情况下:

  • 用户将点击CloudFront页面。
  • 它不会在缓存中,因此CloudFront将尝试从原始服务器提取副本。
  • 原始服务器将回复401,因此CloudFront不会对其进行缓存。

即使这样工作并且标题以某种方式来回传递,如果每个页面都要打到你的服务器上,那么使用CloudFront是没有意义的;你只需要使页面更慢,因为你的服务器需要额外的往返。

答案 4 :(得分:-1)

有理由CF删除Authorization标头,想象2个用户要求相同的对象,第一个将授予访问权限,CF将缓存对象,然后第二个用户将获得之前由CloudFront缓存的对象

好消息是使用转发标头您可以将Authorization标头转发到源,这意味着该对象将被缓存多次,因为标头值是缓存“key”的一部分

对于exmple用户A GETS private / index.html 授权:XXXXXXXXXXXXX

  • 该对象将被缓存为private / index.html + XXXXXXXXXXXXX(这是在CF中使用该对象的关键)

现在,当来自不同用户的新请求到达CloudFront时 GET private / index.html 授权:YYYYYYYYYYYY

  • 由于private / index.html + YYYYYYYYYYYY的组合不在CF缓存中,对象将被传递到原点。

然后Cf将缓存2个具有相同名称的不同对象(但不同的散列组合名称)。