AWS - Cloudfront - 如何使用 Origin Custom Headers

AWS - Cloudfront - How To Use Origin Custom Headers

我对 AWS 还很陌生,我现在正在学习一些不同的培训课程,我偶然发现的一件有趣的事情是能够在 Cloudfront 中添加自定义 Headers。也就是说,我似乎无法弄清楚(或找到简单易懂的文档)关于如何 use/leverage 此功能提供的功能。

谁能告诉我怎么做:

  1. 如何访问我设置的headers?例如我使用终端 运行 一些基本的 cURL 命令来查看 headers 我的 Cloudfront 资源,我假设自定义 headers 会在那里,但那里 没有。
  2. 我知道这些自定义 headers 被发送到 Origin 来源 但我对如何使用这些 headers 来改进感到困惑 application/asset逻辑。

如果重要的话,我会在 PHP 中编程。任何解释、代码示例或对有用文档的引用都将不胜感激。感谢您的帮助。

How to access the headers that I set?

"You" browser/curl 用户看不到它们。它们在 CloudFront 和原始服务器之间是私有的,随请求一起发送。

您可以使用 getallheaders().

从您的服务器 PHP 代码访问它们

I'm confused as how to use these headers

他们允许您做的是以下两件事之一:

  • 如果匹配的 header 出现在请求中,它将被发送到源,但您不希望它发送到原样,用新的覆盖它值

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

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

一些潜在的应用:

  • 如果您想要使用签名的 CloudFront URL 或签名的 cookie,您可以添加一个 header,其中包含一个秘密值,向您的 Web 服务器证明请求来自 CloudFront,特别是来自您的 CloudFront 分配,因为值匹配。以前,您的原始服务器必须可公开访问,因为无法验证请求是否通过 CloudFront 到达(并由 CloudFront 授权)——任何人都可以伪造标准 headers,即使您检查了传入请求的 IP 地址,您可以证明它是 "some" CloudFront 分配,而不是 您的 CloudFront 分配。 (恶意用户可以设置 CloudFront 发行版并访问您的内容,如果您实施了这样一个天真的信任场景)。由于浏览器 header 及其值是未知的 to/unseen,因此您可以使用代码中使用的相同机制来验证 header 是否具有预期值读取任何其他传入请求 header。如果您想拒绝出于某些其他原因(除了安全内容的身份验证和访问控制)而未通过 CloudFront 到达的请求,也可以使用此方法。见 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html#forward-custom-headers-restrict-access.

  • 您可以使用它们来修改 CORS header 在通往原点的路上。参见 http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-cors

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

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