diff --git a/app/Components/Helpers.php b/app/Components/Helpers.php index 5ca005b4..da943881 100644 --- a/app/Components/Helpers.php +++ b/app/Components/Helpers.php @@ -318,4 +318,17 @@ class Helpers return $log->save(); } + public static function abortIfNotModified($data): string { + $req = request(); + // Only for "GET" method + if (!$req->isMethod('GET')) { + return ""; + } + + $etag = sha1(json_encode($data)); + if ($etag == $req->header("IF-NONE-MATCH")) { + abort(304); + } + return $etag; + } } diff --git a/app/Http/Controllers/Api/WebApi/BaseController.php b/app/Http/Controllers/Api/WebApi/BaseController.php index f021865f..1b7e632e 100644 --- a/app/Http/Controllers/Api/WebApi/BaseController.php +++ b/app/Http/Controllers/Api/WebApi/BaseController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Api\WebApi; +use App\Components\Helpers; use App\Models\Node; use App\Models\NodeHeartBeat; use App\Models\NodeOnlineLog; @@ -53,6 +54,8 @@ class BaseController $data = [], $addition = [] ): JsonResponse { + $etag = Helpers::abortIfNotModified($data); + $data = [ 'status' => $status, 'code' => $code, @@ -64,7 +67,7 @@ class BaseController $data = array_merge($data, $addition); } - return Response::json($data); + return Response::json($data)->header('ETAG', $etag); } // 上报节点在线人数