Code

Opened 5 years ago

Last modified 3 years ago

#11997 new Bug

cache_control returns 200 OK response even page has not been changed.

Reported by: jtiai Owned by: nobody
Component: Core (Cache system) Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Provided code:

@cache_control(must_revalidate=True)
@cache_page(60 * 60)
def myview(request)
    return HttpResponse('test')

Symptoms:
Returns always 200 OK response and complete cached content. Modified since and modified dates and ETags in request and response headers do match.

Correct behavior:
Return value 304 Not Modified if cache conditions are met and do not fetch data from cache nor execute view.

Attachments (0)

Change History (3)

comment:1 Changed 4 years ago by russellm

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Triage Stage changed from Unreviewed to Accepted

comment:2 Changed 3 years ago by niwi@…

  • Easy pickings unset
  • Severity set to Normal
  • Type set to Bug

I passed something similar, using Generic Class Views.
With DEBUG=True works ok (Returns 304), but with DEBUG=False always returns 200 (And it creates a new cache entry for each request)

Database select with DEBUG=True

sqlite> select cache_key from testcache;
:1:views.decorators.cache.cache_header..0d315d531c1d665a169d1c5df90c50eb.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.cc775e21f18c02dc9fb51010878bc022.es
sqlite> delete from testcache;

Database select with DEBUG=False

sqlite> select cache_key from testcache;
:1:views.decorators.cache.cache_header..0d315d531c1d665a169d1c5df90c50eb.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.cc775e21f18c02dc9fb51010878bc022.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.52984fbac17d6264bc671574cc7f150b.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.6e721d5f3f637978913099b512dab876.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.c76a223f2cb4df2a5b27cc2acd7b23ff.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.53da06fed77acf000071813587833708.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.4d44279ce9d42c1cdc41ff9fba74bfa1.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.5068bbfa80f990c0fca3a42173d203c8.es
:1:views.decorators.cache.cache_page..GET.0d315d531c1d665a169d1c5df90c50eb.662c59ccdd121bfe051841e975b46580.es
[...]

Class View used for this test.

class CacheMixIn(object):
    """ Class for generic cache decorator. """
    @method_decorator(cache_page(60*2))
    @method_decorator(vary_on_headers('User-Agent', 'Cookie'))
    def dispatch(self, *args, **kwargs):
        return super(CacheMixIn, self).dispatch(*args, **kwargs)


class ObjectListMixIn(ListView):
    """ Class for generic settings for all object list. """
    allow_empty = True
    paginate_by = 20


class PostsView(CacheMixIn, ObjectListMixIn):
    queryset = Post.objects.exclude(public=False).order_by('-created_date')

comment:3 Changed 2 years ago by aaugustin

  • UI/UX unset

Change UI/UX from NULL to False.

Add Comment

Modify Ticket

Change Properties
<Author field>
Action
as new
The owner will be changed from nobody to anonymous. Next status will be 'assigned'
as The resolution will be set. Next status will be 'closed'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.