AWS - Cloudfront - 如何使用Origin自定义标头

时间:2016-01-27 17:07:51

标签: php amazon-web-services http-headers amazon-cloudfront

我是AWS的新手,我现在正在经历一些不同的培训课程,我偶然发现的一件有趣的事情就是能够在Cloudfront中添加自定义标题。也就是说,我似乎无法弄清楚(或找到简单易懂的文档)如何使用/利用此功能提供的功能。

有人可以告诉我如何:

  1. 如何访问我设置的标头?例如,我使用终端 运行一些基本的cURL命令来查看我的Cloudfront的标头 资源,我认为自定义标题将在那里,但那里 不
  2. 我知道这些自定义标头被发送到Origin源 但我很困惑如何使用这些标题来改进 应用/资产逻辑。
  3. 如果重要的话我用PHP编程。任何解释,代码示例或有用文档的参考将不胜感激。谢谢你的帮助。

1 个答案:

答案 0 :(得分:5)

  

如何访问我设置的标题?

“你”浏览器/ curl用户无法看到它们。它们在CloudFront和原始服务器之间是私有的,随请求一起发送。

您可以使用getallheaders()从服务器PHP代码访问它们。

  

我对如何使用这些标题感到困惑

他们允许你做的是两件事之一:

  • 如果请求中有匹配的标头,并且它会被发送到原点,但您不希望将其发送到收件人,请用新值覆盖

  • 如果请求中没有匹配的标头,请在发送到原始服务器之前添加它。

但如果您不知道如何处理它们,您可能不需要它们。

一些潜在的应用:

  • 如果您要使用已签名的CloudFront网址或已签名的Cookie,您可以添加一个带有密码值的标头,向您的网络服务器证明该请求来自CloudFront,特别是来自您的 CloudFront分配,因为值匹配。以前,您的原始服务器必须是公共可访问的,因为无法验证请求是否通过CloudFront(并由CloudFront授权)到达 - 标准标头可能由任何人伪造,即使您检查了传入的IP地址请求,您可以证明它是“某些”CloudFront分配,但不是您的 CloudFront分配。 (如果您实施了类似的天真信任方案,恶意用户可以设置CloudFront发行版并访问您的内容)。由于标头及其值是浏览器未知/未看到的,因此您可以使用代码中用于读取任何其他传入请求标头的相同机制来验证标头是否与预期值一起出现。如果您想要拒绝由于某些其他原因而未通过CloudFront到达的请求,除了安全内容的身份验证和访问控制之外,也可以使用此方法。请参阅http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html#forward-custom-headers-restrict-access

  • 您可以使用它们在去往原点的途中修改CORS标题。请参阅http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-cors

  • 如果您有多个指向同一源服务器的CloudFront发行版,您可以使用它们来跟踪请求到达的多个CloudFront分配中的哪一个,以进行计费。

  • 您可以使用它们来弥补原始服务器中的某种限制,无论出于何种原因它都需要查看某个标题,但您不想实际转发此标题,因为那样会损害您的缓存命中率 - CloudFront会根据发送到源的整个请求缓存响应,包括路径,转发标头(如果启用),查询字符串(如果启用)和/或cookie(如果启用)。它只会提供来自缓存的请求,如果它转发到源的请求与它发送的请求完全匹配,以便接收它缓存的响应(因此CloudFront可以根据请求参数缓存同一资源的多个变体)您允许通过转发)。这样做的原因是缓存有义务不对服务器如何根据不同的请求参数改变响应做出假设。除非两个请求在语义上是等效的,否则它们不能被视为等效的缓存目的。