1
0
mirror of https://github.com/django/django.git synced 2025-11-07 07:15:35 +00:00

Fixed #27225 -- Added "Age" header when fetching cached responses.

Co-Authored-By: Author: Alexander Lazarević <laza@e11bits.com>
This commit is contained in:
Rinat Khabibiev
2016-09-15 08:41:07 +03:00
committed by Mariusz Felisiak
parent 4b1cd8edc1
commit 3580b47ed3
2 changed files with 43 additions and 0 deletions

View File

@@ -43,6 +43,8 @@ More details about how the caching works:
"""
import time
from django.conf import settings
from django.core.cache import DEFAULT_CACHE_ALIAS, caches
from django.utils.cache import (
@@ -53,6 +55,7 @@ from django.utils.cache import (
patch_response_headers,
)
from django.utils.deprecation import MiddlewareMixin
from django.utils.http import parse_http_date_safe
class UpdateCacheMiddleware(MiddlewareMixin):
@@ -171,6 +174,15 @@ class FetchFromCacheMiddleware(MiddlewareMixin):
request._cache_update_cache = True
return None # No cache information available, need to rebuild.
# Derive the age estimation of the cached response.
if (max_age_seconds := get_max_age(response)) is not None and (
expires_timestamp := parse_http_date_safe(response["Expires"])
) is not None:
now_timestamp = int(time.time())
remaining_seconds = expires_timestamp - now_timestamp
# Use Age: 0 if local clock got turned back.
response["Age"] = max(0, max_age_seconds - remaining_seconds)
# hit, return cached response
request._cache_update_cache = False
return response