Skip to content

Instantly share code, notes, and snippets.

@shaunlee
Created September 6, 2022 17:00
Show Gist options
  • Save shaunlee/637baddb79f71211bb5219dc3a7bee1c to your computer and use it in GitHub Desktop.
Save shaunlee/637baddb79f71211bb5219dc3a7bee1c to your computer and use it in GitHub Desktop.
Laravel/Lumen Etag Middleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class EtagMiddleware
{
public function handle(Request $request, Closure $next)
{
$response = $next($request);
if (!$request->isMethod('get') && !$request->isMethod('head')) {
return $response;
}
$etag = hash('fnv1a32', $response->getContent());
$requestETag = str_replace('W/"', '', $request->getETags());
$requestETag = str_replace('"', '', $requestETag);
if ($requestETag && $requestETag[0] === $etag) {
$response->setNotModified();
}
$response->setETag($etag, true);
return $response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment