Используя различные ресурсы, я разработал следующее промежуточное программное обеспечение django для предотвращения кэширования браузера для аутентифицированных пользователей:
class NoBrowserCachingMiddleware:
def add_to_header(self, response, key, value):
if response.has_header(key):
values = re.split(r'\s*,\s*', response[key])
if not value in values:
response[key] = ', '.join(values + [value])
else:
response[key] = value
def process_response(self, request, response):
if hasattr(request, 'user') and request.user.is_authenticated():
response['Expires'] = 0
self.add_to_header(response, 'Cache-Control', 'no-cache')
self.add_to_header(response, 'Cache-Control', 'no-store')
self.add_to_header(response, 'Cache-Control', 'must-revalidate')
self.add_to_header(response, 'Pragma', 'no-cache') #HTTP 1.0
if request.is_ajax():
return response
if response.status_code != 200:
return response
if 'text/html' not in response['Content-Type']:
return response
# safari back button fix
response.content = response.content.replace('<body', '<body onunload=""')
return response
Я хотел бы удалить часть, в которой мне нужно изменить ответсодержание.Однако, если я это сделаю, Safari отобразит предыдущую кэшированную страницу после выхода из системы, если пользователь нажмет кнопку «Назад».Есть ли способ предотвратить это, используя стандартные заголовки HTTP?
Спасибо, Пит