compliance.html.en revision 19737f4fbef1805f9c3e9e045bb6d710a1e5e10f
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<?xml version="1.0" encoding="ISO-8859-1"?>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin This file is generated from xml source: DO NOT EDIT
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin -->
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<title>HTTP Protocol Compliance - Apache HTTP Server</title>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen<script src="/style/scripts/prettify.js" type="text/javascript">
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen</script>
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<link href="/images/favicon.ico" rel="shortcut icon" /></head>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<body id="manual-page"><div id="page-header">
d229f940abfb2490dee17979e9a5ff31b7012eb5rbowen<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<p class="apache">Apache HTTP Server Version 2.5</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<img alt="" src="/images/feather.gif" /></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div id="path">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.5</a></div><div id="page-content"><div id="preamble"><h1>HTTP Protocol Compliance</h1>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="toplang">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<p><span>Available Languages: </span><a href="/en/compliance.html" title="English">&nbsp;en&nbsp;</a></p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin</div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This document describes the mechanism to set a policy for HTTP
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin protocol compliance for a given URL space by the origin servers or
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin applications behind that URL space.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>For those who may have received an error message from a rejected
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin policy, and need to know what the policy rejection means and what
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin they might do to fix the error, each policy is described below.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#intro">Enforcing HTTP Protocol Compliance in Apache 2</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policyconditional">Conditional Request Policy</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policylength">Content-Length Policy</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policytype">Content-Type Policy</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policykeepalive">Keepalive Policy</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policymaxage">Freshness Lifetime / Maxage Policy</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policynocache">No Cache Policy</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policyvalidation">Validation Policy</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policyvary">Vary Header Policy</a></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<li><img alt="" src="/images/down.gif" /> <a href="#policyversion">Protocol Version Policy</a></li>
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh</ul><h3>See also</h3><ul class="seealso"><li><a href="filter.html">Filters</a></li></ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="intro" id="intro">Enforcing HTTP Protocol Compliance in Apache 2</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policyconditional">PolicyConditional</a></code></li><li><code class="directive"><a href="/mod/mod_policy.html#policylength">PolicyLength</a></code></li><li><code class="directive"><a href="/mod/mod_policy.html#policykeepalive">PolicyKeepalive</a></code></li><li><code class="directive"><a href="/mod/mod_policy.html#policytype">PolicyType</a></code></li><li><code class="directive"><a href="/mod/mod_policy.html#policyvary">PolicyVary</a></code></li><li><code class="directive"><a href="/mod/mod_policy.html#policyvalidation">PolicyValidation</a></code></li><li><code class="directive"><a href="/mod/mod_policy.html#policynocache">PolicyNocache</a></code></li><li><code class="directive"><a href="/mod/mod_policy.html#policymaxage">PolicyMaxage</a></code></li><li><code class="directive"><a href="/mod/mod_policy.html#policyversion">PolicyVersion</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>The HTTP protocol follows the <strong>robustness principle</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin as described in <a href="http://tools.ietf.org/html/rfc1122">RFC1122</a>,
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin which states <strong>"Be liberal in what you accept, and conservative in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin what you send"</strong>. As a result of this principle, HTTP clients will
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin compensate for and recover from incorrect or misconfigured responses, or
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin responses that are uncacheable.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>As a website is scaled up to face greater and greater traffic loads,
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin suboptimal or misconfigured applications or server configurations can
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin threaten both the stability and scalability of the website, as well as
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the hosting costs associated with it. A website can also scale up to face
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin greater configuration complexity, and it can be increasingly difficult to
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin detect and keep track of suboptimally configured URL spaces on a given
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin server.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Eventually a point is reached where the principle "conservative in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin what you send" needs to be enforced by the server administrator.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>The <code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code> module provides a set of filters
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin which can be applied to a server, allowing key features of the HTTP
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin protocol to be explicitly tested, and non compliant responses logged as
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin warnings, or rejected outright as an error. Each filter can be applied
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin separately, allowing the administrator to pick and choose which policies
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin should be enforced depending on the circumstances of their environment.
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>The filters might be placed in testing and staging environments for
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the benefit of application and website developers, or may be applied
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin to production servers to protect infrastructure from systems outside
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the administrator's direct control.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p class="figure">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <img src="images/compliance-reverse-proxy.png" width="666" height="239" alt="Enforcing HTTP protocol compliance for an application server" />
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>In the above example, an Apache httpd server has been placed between
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the application server and the internet at large, and configured to cache
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin responses from the application server. The <code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filters have been added to enforce support for cacheable content and
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin conditional requests, ensuring that both <code class="module"><a href="/mod/mod_cache.html">mod_cache</a></code> and
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin public caches on the internet are fully able to cache content created
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin by the restful application server efficiently.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p class="figure">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <img src="images/compliance-static.png" width="469" height="239" alt="Enforcing HTTP protocol compliance in a static server" />
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>In the above simpler example, a static server serving highly cacheable
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin content has a set of policies applied to ensure that the server configuration
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin conforms to a minimum level of compliance.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policyconditional" id="policyconditional">Conditional Request Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policyconditional">PolicyConditional</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the server does not correctly respond
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin to a conditional request with the appropriate status code.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Conditional requests form the mechanism by which an HTTP cache makes
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin stale content fresh again, and particularly for content with short freshness
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin lifetimes, lack of support for conditional requests can add avoidable load
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin to the server.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Most specifically, the existence of any of following headers in the
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin request makes the request conditional:</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dl>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt><code>If-Match</code></dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>If the provided ETag in the <code>If-Match</code> header does not match
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the ETag of the response, the server should return
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>412 Precondition Failed</code>. Full details of how to handle an
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>If-Match</code> header can be found in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.24">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.24</a>.</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt><code>If-None-Match</code></dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>If the provided ETag in the <code>If-None-Match</code> header matches
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the ETag of the response, the server should return either
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>304 Not Modified</code> for GET/HEAD requests, or
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>412 Precondition Failed</code> for other methods. Full details of how
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin to handle an <code>If-None-Match</code> header can be found in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.26">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.26</a>.</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt><code>If-Modified-Since</code></dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>If the provided date in the <code>If-Modified-Since</code> header is
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin older than the <code>Last-Modified</code> header of the response, the server
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin should return <code>304 Not Modified</code>. Full details of how to handle an
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>If-Modified-Since</code> header can be found in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.25</a>.</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt><code>If-Unmodified-Since</code></dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>If the provided date in the <code>If-Modified-Since</code> header is
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin newer than the <code>Last-Modified</code> header of the response, the server
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin should return <code>412 Precondition Failed</code>. Full details of how to
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin handle an <code>If-Unmodified-Since</code> header can be found in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.28">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.28</a>.</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt><code>If-Range</code></dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>If the provided ETag or date in the <code>If-Range</code> header matches
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the ETag or Last-Modified of the response, and a valid <code>Range</code>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin is present, the server should return
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>206 Partial Response</code>. Full details of how to handle an
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>If-Range</code> header can be found in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.27">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.27</a>.</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </dl>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>If the response is detected to have been successful (a 2xx response),
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin but was conditional and one of the responses above was expected instead,
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin this policy will be rejected. Responses that indicate a redirect or a
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin failure of some kind (3xx, 4xx, 5xx) will be ignored by this policy.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_CONDITIONAL</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policylength" id="policylength">Content-Length Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policylength">PolicyLength</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the server response does not contain
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin an explicit <code>Content-Length</code> header.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>There are a number of ways of determining the length of a response
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin body, described in full in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec4.4">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 4.4 Message Length</a>.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>When the <code>Content-Length</code> header is present, the size of
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the body is declared at the start of the response. If this information
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin is missing, an HTTP cache might choose to ignore the response, as it
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin does not know in advance whether the response will fit within the
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin cache's defined limits.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>HTTP/1.1 defines the <code>Transfer-Encoding</code> header as an
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin alternative to <code>Content-Length</code>, allowing the end of the
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin response to be indicated to the client without the client having to
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin know the length beforehand. However, when HTTP/1.0 requests are
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin processed, and no <code>Content-Length</code> is specified, the only
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin mechanism available to the server to indicate the end of the request
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin is to drop the connection. In an environment containing load
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin balancers, this can cause the keepalive mechanism to be bypassed.
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>If the response is detected to have been successful (a 2xx response),
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin and has a response body (this excludes <code>204 No Content</code>), and
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the <code>Content-Length</code> header is missing, this policy will be
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin rejected. Responses that indicate a redirect or a failure of some kind
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin (3xx, 4xx, 5xx) will be ignored by this policy.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <div class="warning">It should be noted that some modules, such as
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>, add their own <code>Content-Length</code>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin header should the response be small enough for it to have been possible
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin to read the response lacking such a header in one go. This may cause
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin small responses to pass this policy, while larger responses may
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin fail for the same URL.</div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_LENGTH</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policytype" id="policytype">Content-Type Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policytype">PolicyType</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the server response does not contain
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin an explicit and syntactically correct <code>Content-Type</code> header
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin that matches the server defined pattern.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>The media type of the body is placed in the <code>Content-Type</code>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin header, and the format of the header is described in full in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec3.7">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 3.7 Media Types</a>.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>A syntactically valid content type might look as follows:</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <div class="example"><p><code>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin Content-Type: text/html; charset=iso-8859-1
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </code></p></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Invalid content types might include:</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <div class="example"><p><code>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin # invalid<br />
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin Content-Type: foo<br />
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin # blank<br />
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin Content-Type:
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </code></p></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>The server administrator has the option to restrict the policy to one
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin or more specific types, or could specify a general wildcard type such as
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>*/*</code>.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_TYPE</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policykeepalive" id="policykeepalive">Keepalive Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policykeepalive">PolicyKeepalive</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the server response does not contain
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin an explicit <code>Content-Length</code> header, or a
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>Transfer-Encoding</code> of chunked.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>There are a number of ways of determining the length of a response
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin body, described in full in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec4.4">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 4.4 Message Length</a>.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>When the <code>Content-Length</code> header is present, the size of
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the body is declared at the start of the response. HTTP/1.1 defines the
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>Transfer-Encoding</code> header as an alternative to
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>Content-Length</code>, allowing the end of the response to be
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin indicated to the client without the client having to know the length
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin beforehand. In the absence of these two mechanisms, the only way for
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin a server to indicate the end of the request is to drop the connection.
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin In an environment containing load balancers, this can cause the keepalive
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin mechanism to be bypassed.
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Most specifically, we follow these rules:</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dl>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt>IF</dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>we have not marked this connection as errored;</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt>and</dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>the client isn't expecting 100-continue</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt>and</dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>the response status does not require a close;</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt>and</dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>the response body has a defined length due to the status code
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin being 304 or 204, the request method being HEAD, already having defined
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin Content-Length or Transfer-Encoding: chunked, or the request version
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin being HTTP/1.1 and thus capable of being set as chunked</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dt>THEN</dt>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <dd>we support keepalive.</dd>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </dl>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <div class="warning">The server may choose to turn off keepalive for
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin various reasons, such as an imminent shutdown, or a Connection: close from
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin the client, or an HTTP/1.0 client request with a response with no
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>Content-Length</code>, but for our purposes we only care that
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin keepalive was possible from the application, not that keepalive actually
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin took place.</div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>It should also be noted that the Apache httpd server includes a filter
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin that adds chunked encoding to responses without an explicit content
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin length. This policy catches those cases where this filter is bypassed or
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin not in effect.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_KEEPALIVE</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policymaxage" id="policymaxage">Freshness Lifetime / Maxage Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policymaxage">PolicyMaxage</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the server response does not have
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin an explicit <strong>freshness lifetime</strong> at least as long
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin as the server defined limit, or if the freshness lifetime is
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin calculated based on a heuristic.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Full details of how a freshness lifetime is calculated is described in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin full in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec13.2">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 13.2 Expiration Model</a>.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>During the freshness lifetime, a cache does not need to contact the
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin origin server at all, it can simply pass the cached content as is back
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin to the client.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>When the freshness lifetime is reached, the cache should contact the
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin origin server in an effort to check whether the content is still fresh,
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin and if not, replace the content.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>When the freshness lifetime is too short, it can result in excessive
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin load on the server. In addition, should an outage occur that is as long
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin or longer than the freshness lifetime, all cached content will become
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin stale, which could cause a thundering herd of traffic when the
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin server or network returns.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_MAXAGE</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policynocache" id="policynocache">No Cache Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policynocache">PolicyNocache</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the server response declares itself
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin uncacheable using either the <code>Cache-Control</code> or
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>Pragma</code> headers.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Full details of how content may be declared uncacheable is described in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin full in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.9.1 What is Cacheable</a>, and within the definition
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin for the <code>Pragma</code> header in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.32 Pragma</a>.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Most specifically, should any of the following header combinations
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin exist in the response headers, the response will be rejected:</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <ul>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <li><code>Cache-Control: no-cache</code></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <li><code>Cache-Control: no-store</code></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <li><code>Cache-Control: private</code></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <li><code>Pragma: no-cache</code></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </ul>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>When unexpected, uncacheable content may produce unacceptable levels
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin of server load, or may incur significant cost. When this policy is enabled,
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin all server defined uncacheable content will be rejected.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_NOCACHE</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policyvalidation" id="policyvalidation">Validation Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policyvalidation">PolicyValidation</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the server response does not contain
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin either a syntactically correct <code>ETag</code> or
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>Last-Modified</code> header.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>The <code>ETag</code> header is described in full in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.19">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.19 Etag</a>, and the <code>Last-Modified</code> header
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin is described in full in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.29">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.29 Last-Modified</a>.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>In addition to being checked present, the headers are checked for
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin syntax.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>An <code>ETag</code> that is not surrounded with quotes, or is not
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin declared "weak" by prefixing it with a "W/" will cause the policy to be
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin rejected. A <code>Last-Modified</code> that is not parsed as a valid date
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin will cause the policy to be rejected.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_VALIDATION</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policyvary" id="policyvary">Vary Header Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policyvary">PolicyVary</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the server response contains a
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <code>Vary</code> header, and that header in turn contains a header
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin blacklisted by the administrator.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>The <code>Vary</code> header is described in full in
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin RFC2616 section 14.44 Vary</a>.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Some client provided headers, such as <code>User-Agent</code>,
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin can contain thousands or millions of combinations of values over a period
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin of time, and if the response is declared cacheable, a cache might attempt
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin to cache each of these responses separately, filling up the cache and
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin crowding out other entries in the cache. In this scenario, if so
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin configured, the policy will reject the response.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_VARY</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="section">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<h2><a name="policyversion" id="policyversion">Protocol Version Policy</a></h2>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_policy.html">mod_policy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/mod_policy.html#policyversion">PolicyVersion</a></code></li></ul></td></tr></table>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy will be rejected if the client request was made with a
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin version number lower than the version of HTTP specified.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is typically used with restful applications where
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin control over the type of client is desired. This policy can be used
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin alongside the <code>POLICY_KEEPALIVE</code> filter to ensure that
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin HTTP/1.0 clients don't cause keepalive connections to be dropped.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>Possible minimum versions that could be specified are:</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <ul><li><code>HTTP/1.1</code></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <li><code>HTTP/1.0</code></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <li><code>HTTP/0.9</code></li>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </ul>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin <p>This policy is implemented by the <strong>POLICY_VERSON</strong>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin filter.</p>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin </div></div>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<div class="bottomlang">
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin<p><span>Available Languages: </span><a href="/en/compliance.html" title="English">&nbsp;en&nbsp;</a></p>
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>This section is experimental!</strong><br />Comments placed here should not be expected
19737f4fbef1805f9c3e9e045bb6d710a1e5e10fhumbedoohto last beyond the testing phase of this system, nor do we in any way guarantee that we'll read them.</div>
19737f4fbef1805f9c3e9e045bb6d710a1e5e10fhumbedooh<script type="text/javascript"><!--//--><![CDATA[//><!--
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedoohvar lang = 'en';
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedoohvar disqus_shortname = 'httpd';
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedoohvar disqus_identifier = window.location.href.replace(/(current|trunk)/, "2.4").replace(/\/[a-z]{2}\//, "/").replace(window.location.protocol, "http:") + '.' + lang;
19737f4fbef1805f9c3e9e045bb6d710a1e5e10fhumbedoohif (disqus_identifier.indexOf("httpd.apache.org") == -1) {
19737f4fbef1805f9c3e9e045bb6d710a1e5e10fhumbedooh document.write('<div id="disqus_thread">\n</div>');
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh (function() {
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh dsq.src = window.location.protocol + '//' + disqus_shortname + '.disqus.com/embed.js';
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh })();
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh} else {
19737f4fbef1805f9c3e9e045bb6d710a1e5e10fhumbedooh document.write("Comments have been disabled for offline viewing.");
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh}
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh//--><!]]></script></div><div id="footer">
5effc8b39fae5cd169d17f342bfc265705840014rbowen<p class="apache">Copyright 2012 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
d229f940abfb2490dee17979e9a5ff31b7012eb5rbowen<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
7fec19672a491661b2fe4b29f685bc7f4efa64d4ndif (typeof(prettyPrint) !== undefined) {
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd prettyPrint();
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd}
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd//--><!]]></script>
64f23d7fddbd8bacb8c18434baedb5f1f86b432aminfrin</body></html>