

# 了解源请求策略和缓存策略如何协同工作
<a name="understanding-how-origin-request-policies-and-cache-policies-work-together"></a>

您可以使用 CloudFront [源请求策略](controlling-origin-requests.md)来控制 CloudFront 向源发送的请求，这些请求称为*源请求*。要使用源请求策略，必须将[缓存策略](controlling-the-cache-key.md)附加到相同的缓存行为。如果没有缓存策略，则无法在缓存行为中使用源请求策略。有关更多信息，请参阅 [使用策略来控制源请求](controlling-origin-requests.md)。

源请求策略和缓存策略协同工作以确定 CloudFront 在源请求中包含的值。您在缓存键中指定的所有 URL 查询字符串、HTTP 标头和 Cookie（使用缓存策略）都将自动包含在源请求中。您在源请求策略中指定的任何其他查询字符串、标头和 Cookie 也都将包含在源请求中（但不会包含在缓存键中）。

源请求策略和缓存策略的设置似乎相互冲突。例如，一个策略可能允许某些值，而另一个策略可能阻止这些值。下表说明了当您同时使用源请求策略和缓存策略的设置时，CloudFront 在源请求中包含哪些值。这些设置通常适用于所有类型的值（查询字符串、标头和 Cookie），唯一的不同是您无法在缓存策略中指定所有标头或使用标头阻止列表。


<table>
<thead>
  <tr><th></th><th colspan="4">**源请求策略**</th></tr>
  <tr><th></th><th>**无**</th><th>**全部**</th><th>**允许列表**</th><th>**阻止列表**</th></tr>
</thead>
<tbody>
  <tr><td colspan="5">**缓存策略**</td></tr>
  <tr><td>**无**</td><td>除了每个源请求中包含的默认值外，源请求中不包含来自查看器请求的任何值。有关更多信息，请参阅 [使用策略来控制源请求](controlling-origin-requests.md)。</td><td>查看器请求中的所有值都将包含在源请求中。</td><td>只有源请求策略中指定的值才包含在源请求中。</td><td>***除了***源请求策略中指定的值，来自查看器请求的所有值都包含在源请求中。</td></tr>
  <tr><td>**全部**<br />**注意：**您不能在缓存策略中指定所有标头。</td><td>来自查看器请求的所有查询字符串和 Cookie 都包含在源请求中。</td><td>查看器请求中的所有值都包含在源请求中。</td><td>来自查看器请求的所有查询字符串和 Cookie 以及源请求策略中指定的任何标头都包含在源请求中。</td><td>来自查看器请求的所有查询字符串和 Cookie 都包含在源请求中，即使是源请求策略阻止列表中指定的查询字符串和 Cookie 也是如此。缓存策略设置会覆盖源请求策略阻止列表。</td></tr>
  <tr><td>**允许列表**</td><td>只有查看器请求中指定的值会包含在源请求中。</td><td>查看器请求中的所有值都包含在源请求中。</td><td>在缓存策略或源请求请求策略中指定的所有值都包含在源请求中。</td><td>缓存策略中指定的值包含在源请求中，即使在源请求策略阻止列表中指定了相同的值也是如此。缓存策略允许列表将覆盖源请求策略阻止列表。</td></tr>
  <tr><td>**阻止列表**<br />**注意：**您无法在缓存策略阻止列表中指定标头。</td><td>***除了***指定的查询字符串和 Cookie ，来自查看器请求的所有查询字符串和 Cookie 都包含在源请求中。</td><td>查看器请求中的所有值都包含在源请求中。</td><td>源请求策略中指定的值包含在源请求中，即使在缓存策略阻止列表中指定了相同的值也是如此。源请求策略允许列表将覆盖缓存策略阻止列表。</td><td>***除了***缓存策略或源请求策略中指定的值，来自查看器请求的所有值都包含在源请求中。</td></tr>
</tbody>
</table>
