Final Class Yiisoft\HttpMiddleware\HttpCache\HttpCacheMiddleware
| Inheritance | Yiisoft\HttpMiddleware\HttpCache\HttpCacheMiddleware |
|---|---|
| Implements | Psr\Http\Server\MiddlewareInterface |
Middleware that implements HTTP caching using Cache-Control, ETag, and Last-Modified headers.
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\HttpMiddleware\HttpCache\HttpCacheMiddleware | |
| process() | Yiisoft\HttpMiddleware\HttpCache\HttpCacheMiddleware |
Method Details
| public mixed __construct ( \Psr\Http\Message\ResponseFactoryInterface $responseFactory, Yiisoft\HttpMiddleware\HttpCache\CacheControlProvider\CacheControlProviderInterface $cacheControlProvider = new NullCacheControlProvider(), Yiisoft\HttpMiddleware\HttpCache\LastModifiedProvider\LastModifiedProviderInterface $lastModifiedProvider = new NullLastModifiedProvider(), Yiisoft\HttpMiddleware\HttpCache\ETagProvider\ETagProviderInterface $eTagProvider = new NullETagProvider(), Yiisoft\HttpMiddleware\HttpCache\ETagGenerator\ETagGeneratorInterface $eTagGenerator = new DefaultETagGenerator() ) | ||
| $responseFactory | \Psr\Http\Message\ResponseFactoryInterface |
The response factory to create responses. |
| $cacheControlProvider | Yiisoft\HttpMiddleware\HttpCache\CacheControlProvider\CacheControlProviderInterface |
The cache control headers provider. |
| $lastModifiedProvider | Yiisoft\HttpMiddleware\HttpCache\LastModifiedProvider\LastModifiedProviderInterface |
The last modified dates provider. |
| $eTagProvider | Yiisoft\HttpMiddleware\HttpCache\ETagProvider\ETagProviderInterface |
The provider for {@see \Yiisoft\HttpMiddleware\HttpCache\ETag}. |
| $eTagGenerator | Yiisoft\HttpMiddleware\HttpCache\ETagGenerator\ETagGeneratorInterface |
The {@see \Yiisoft\HttpMiddleware\HttpCache\ETag} string values generator. |
public function __construct(
private readonly ResponseFactoryInterface $responseFactory,
private readonly CacheControlProviderInterface $cacheControlProvider = new NullCacheControlProvider(),
private readonly LastModifiedProviderInterface $lastModifiedProvider = new NullLastModifiedProvider(),
private readonly ETagProviderInterface $eTagProvider = new NullETagProvider(),
private readonly ETagGeneratorInterface $eTagGenerator = new DefaultETagGenerator(),
) {
}
| public \Psr\Http\Message\ResponseInterface process ( \Psr\Http\Message\ServerRequestInterface $request, \Psr\Http\Server\RequestHandlerInterface $handler ) | ||
| $request | \Psr\Http\Message\ServerRequestInterface | |
| $handler | \Psr\Http\Server\RequestHandlerInterface | |
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
if (!in_array($request->getMethod(), ['GET', 'HEAD'], true)) {
return $handler->handle($request);
}
$cacheControl = $this->cacheControlProvider->get($request);
$eTag = $this->eTagProvider->get($request);
$eTagHeader = $eTag === null ? null : new ETagHeader($eTag, $this->eTagGenerator);
$lastModified = $this->lastModifiedProvider->get($request);
$cacheIsValid = $this->validateCache($request, $lastModified, $eTagHeader);
if ($cacheIsValid) {
$response = $this->responseFactory->createResponse(304);
$response = $this->addETagHeader($response, $eTagHeader);
$response = $this->addCacheControlHeader($response, $cacheControl);
if ($eTagHeader === null) {
$response = $this->addLastModifiedHeader($response, $lastModified);
}
return $response;
}
$response = $handler->handle($request);
$response = $this->addETagHeader($response, $eTagHeader);
$response = $this->addCacheControlHeader($response, $cacheControl);
return $this->addLastModifiedHeader($response, $lastModified);
}
Signup or Login in order to comment.