代码之家  ›  专栏  ›  技术社区  ›  leifg

Cloufdront屏蔽用户代理和远程地址

  •  0
  • leifg  · 技术社区  · 7 年前

    我们正在运行一个与API通信的SPA。两者都通过Cloudfront向公众公开。

    • 我们看到的远程地址是AWS云的地址
    • 用户代理标题字段设置为“Amazon Cloudfront”,而不是用户的浏览器

    我已经完成了以下步骤: https://aws.amazon.com/premiumsupport/knowledge-center/configure-cloudfront-to-forward-headers/

    我们不关心缓存的影响(我们没有太多的流量),我们只需要在后端显示正确的字段。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Michael - sqlbot    7 年前

    默认情况下,大多数请求头都会被删除,因为CloudFront的默认行为通常是围绕最佳缓存设计的。CloudFront的默认标头处理行为 is documented

    如果需要在源位置查看特定的头,请将这些头列为白名单,以便在缓存分发中转发。本文件将其称为 “Selecting the Headers on Which You Want CloudFront to Base Caching” --这就是它所做的——但这种描述掩盖了实际发生的事情。CloudFront会删除其余的头,因为它无法确定具有特定值的特定头是否会更改源生成的响应。如果默认情况下它没有删除这些头,那么当用户看到缓存中提供的“错误”响应时,就会出现另一个方向的混乱。

    Host 您正在发送的白名单中的标题。

    set the Error Caching Minimum TTL to 0 ,因为默认值为300秒。。。因此,在修复后的5分钟内,您无法看到问题是否已修复。此默认值也是出于设计目的,是一种保护措施,以避免源站过载,导致可能继续失败的请求。

    Age 响应头,在从缓存提供响应时随时显示。它告诉您CloudFront获得当前返回给您的响应已经有多长时间了(以秒为单位)。

    如果要禁用CloudFront缓存,可以将最大值、最小值和默认值TTL all设置为0(这只影响2xx和3xx HTTP响应——错误缓存在不同的时间窗口,如上所述),或者您的源站可以一致地返回 Cache-Control: s-maxage=0 ,这将阻止CloudFront缓存响应。