Final Class Yiisoft\HttpMiddleware\HttpCache\HttpCacheMiddleware
| Inheritance | Yiisoft\ |
|---|---|
| Implements | Psr\ |
Middleware that implements HTTP caching using Cache-Control, ETag, and Last-Modified headers.
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\ |
|
| process() | Yiisoft\ |
Method Details
| public mixed __construct ( \ | ||
| $responseFactory | \ |
The response factory to create responses. |
| $cacheControlProvider | Yiisoft\ |
The cache control headers provider. |
| $lastModifiedProvider | Yiisoft\ |
The last modified dates provider. |
| $eTagProvider | Yiisoft\ |
The provider for {@see \ |
| $eTagGenerator | Yiisoft\ |
The {@see \ |
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 \ | ||
| $request | \ |
|
| $handler | \ |
|
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);
}
User Contributed Notes
Leave a comment
Join the conversation to share a note.