+ /**
+ * Update call data
+ * @param Request $request
+ * @param Response $response
+ * @return bool
+ */
+ public function update(Request $request, Response &$response) : bool {
+ $ctl = new Control($request);
+ if (!$ctl->isValid()) {
+ return false;
+ }
+
+ if ($response->getResponseCode() !== 304) {
+ return $this->save($request, $response);
+ }
+
+ /** @var Response $cached */
+ if (!$this->cache->fetch($ctl->getKey(), $cached)) {
+ return $this->save($request, $response);
+ }
+
+ if ($response->getHeader("ETag") !== $cached->getHeader("ETag")) {
+ return $this->save($request, $response);
+ }
+
+ $cached->setHeader("X-Cache-Update", $cached->getHeader("X-Cache-Update") + 1);
+ $response = $cached;
+ return true;
+ }