name: HttpCache class_comment: '# * Cache provides HTTP caching. # * # * @author Fabien Potencier ' dependencies: - name: Request type: class source: Symfony\Component\HttpFoundation\Request - name: Response type: class source: Symfony\Component\HttpFoundation\Response - name: HttpKernelInterface type: class source: Symfony\Component\HttpKernel\HttpKernelInterface - name: TerminableInterface type: class source: Symfony\Component\HttpKernel\TerminableInterface properties: [] methods: - name: __construct visibility: public parameters: - name: kernel - name: store - name: surrogate default: 'null' - name: options default: '[]' comment: "# * Cache provides HTTP caching.\n# *\n# * @author Fabien Potencier \n\ # */\n# class HttpCache implements HttpKernelInterface, TerminableInterface\n\ # {\n# public const BODY_EVAL_BOUNDARY_LENGTH = 24;\n# \n# private Request $request;\n\ # private ?ResponseCacheStrategyInterface $surrogateCacheStrategy = null;\n# private\ \ array $options = [];\n# private array $traces = [];\n# \n# /**\n# * Constructor.\n\ # *\n# * The available options are:\n# *\n# * * debug If true,\ \ exceptions are thrown when things go wrong. Otherwise, the cache\n# * \ \ will try to carry on and deliver a meaningful response.\n\ # *\n# * * trace_level May be one of 'none', 'short' and 'full'.\ \ For 'short', a concise trace of the\n# * main request\ \ will be added as an HTTP header. 'full' will add traces for all\n# * \ \ requests (including ESI subrequests). (default: 'full' if\ \ in debug; 'none' otherwise)\n# *\n# * * trace_header Header name\ \ to use for traces. (default: X-Symfony-Cache)\n# *\n# * * default_ttl \ \ The number of seconds that a cache entry should be considered\n# * \ \ fresh when no explicit freshness information is provided\ \ in\n# * a response. Explicit Cache-Control or Expires\ \ headers\n# * override this value. (default: 0)\n\ # *\n# * * private_headers Set of request headers that trigger \"private\"\ \ cache-control behavior\n# * on responses that don't\ \ explicitly state whether the response is\n# * public\ \ or private via a Cache-Control directive. (default: Authorization and Cookie)\n\ # *\n# * * skip_response_headers Set of response headers that are never cached\ \ even if a response is cacheable (public).\n# * (default:\ \ Set-Cookie)\n# *\n# * * allow_reload Specifies whether the client\ \ can force a cache reload by including a\n# * Cache-Control\ \ \"no-cache\" directive in the request. Set it to ``true``\n# * \ \ for compliance with RFC 2616. (default: false)\n# *\n# * * allow_revalidate\ \ Specifies whether the client can force a cache revalidate by including\n\ # * a Cache-Control \"max-age=0\" directive in the\ \ request. Set it to ``true``\n# * for compliance with\ \ RFC 2616. (default: false)\n# *\n# * * stale_while_revalidate Specifies the\ \ default number of seconds (the granularity is the second as the\n# * \ \ Response TTL precision is a second) during which the cache\ \ can immediately return\n# * a stale response while\ \ it revalidates it in the background (default: 2).\n# * \ \ This setting is overridden by the stale-while-revalidate HTTP Cache-Control\n\ # * extension (see RFC 5861).\n# *\n# * * stale_if_error\ \ Specifies the default number of seconds (the granularity is the second)\ \ during which\n# * the cache can serve a stale response\ \ when an error is encountered (default: 60).\n# * \ \ This setting is overridden by the stale-if-error HTTP Cache-Control extension\n\ # * (see RFC 5861)." - name: getStore visibility: public parameters: [] comment: '# * Gets the current store.' - name: getTraces visibility: public parameters: [] comment: '# * Returns an array of events that took place during processing of the last request.' - name: addTraces visibility: private parameters: - name: response comment: null - name: getLog visibility: public parameters: [] comment: '# * Returns a log message for the events of the last request processing.' - name: getRequest visibility: public parameters: [] comment: '# * Gets the Request instance associated with the main request.' - name: getKernel visibility: public parameters: [] comment: '# * Gets the Kernel instance.' - name: getSurrogate visibility: public parameters: [] comment: '# * Gets the Surrogate instance. # * # * @throws \LogicException' - name: handle visibility: public parameters: - name: request - name: type default: HttpKernelInterface::MAIN_REQUEST - name: catch default: 'true' comment: null - name: terminate visibility: public parameters: - name: request - name: response comment: null - name: pass visibility: protected parameters: - name: request - name: catch default: 'false' comment: '# * Forwards the Request to the backend without storing the Response in the cache. # * # * @param bool $catch Whether to process exceptions' - name: invalidate visibility: protected parameters: - name: request - name: catch default: 'false' comment: '# * Invalidates non-safe methods (like POST, PUT, and DELETE). # * # * @param bool $catch Whether to process exceptions # * # * @throws \Exception # * # * @see RFC2616 13.10' - name: lookup visibility: protected parameters: - name: request - name: catch default: 'false' comment: '# * Lookups a Response from the cache for the given Request. # * # * When a matching cache entry is found and is fresh, it uses it as the # * response without forwarding any request to the backend. When a matching # * cache entry is found but is stale, it attempts to "validate" the entry with # * the backend using conditional GET. When no matching cache entry is found, # * it triggers "miss" processing. # * # * @param bool $catch Whether to process exceptions # * # * @throws \Exception' - name: validate visibility: protected parameters: - name: request - name: entry - name: catch default: 'false' comment: '# * Validates that a cache entry is fresh. # * # * The original request is used as a template for a conditional # * GET request with the backend. # * # * @param bool $catch Whether to process exceptions' - name: fetch visibility: protected parameters: - name: request - name: catch default: 'false' comment: '# * Unconditionally fetches a fresh response from the backend and # * stores it in the cache if is cacheable. # * # * @param bool $catch Whether to process exceptions' - name: forward visibility: protected parameters: - name: request - name: catch default: 'false' - name: entry default: 'null' comment: '# * Forwards the Request to the backend and returns the Response. # * # * All backend requests (cache passes, fetches, cache validations) # * run through this method. # * # * @param bool $catch Whether to catch exceptions or not # * @param Response|null $entry A Response instance (the stale entry if present, null otherwise)' - name: isFreshEnough visibility: protected parameters: - name: request - name: entry comment: '# * Checks whether the cache entry is "fresh enough" to satisfy the Request.' - name: lock visibility: protected parameters: - name: request - name: entry comment: '# * Locks a Request during the call to the backend. # * # * @return bool true if the cache entry can be returned even if it is staled, false otherwise' - name: store visibility: protected parameters: - name: request - name: response comment: '# * Writes the Response to the cache. # * # * @throws \Exception' - name: restoreResponseBody visibility: private parameters: - name: request - name: response comment: '# * Restores the Response body.' - name: processResponseBody visibility: protected parameters: - name: request - name: response comment: null - name: isPrivateRequest visibility: private parameters: - name: request comment: '# * Checks if the Request includes authorization or other sensitive information # * that should cause the Response to be considered private by default.' - name: record visibility: private parameters: - name: request - name: event comment: '# * Records that an event took place.' - name: getTraceKey visibility: private parameters: - name: request comment: '# * Calculates the key we use in the "trace" array for a given request.' - name: mayServeStaleWhileRevalidate visibility: private parameters: - name: entry comment: '# * Checks whether the given (cached) response may be served as "stale" when a revalidation # * is currently in progress.' - name: waitForLock visibility: private parameters: - name: request comment: '# * Waits for the store to release a locked entry.' traits: - Symfony\Component\HttpFoundation\Request - Symfony\Component\HttpFoundation\Response - Symfony\Component\HttpKernel\HttpKernelInterface - Symfony\Component\HttpKernel\TerminableInterface interfaces: - HttpKernelInterface