When using @cache.action in controller functions, the key used for storing
the content is auto-generated based on the request URL. To be more
specific, the key is generated based in *current.request.env.path_info* and
*current.response.view:*
https://github.com/web2py/web2py/blob/1ce316609a7a70c42dbd586c4a264193608880ba/gluon/cache.py#L614
However, I'm seeing this issue.
Let's say we have a website that has articles splitted into several
categories.
We also have a controller function that exposes the articles given a
category ID passed as first argument in the URL:
@cache.action(cache_model=cache.redis, session=False, vars=False, public=
True)
def category():
cat = db.categories(request.args(0))
articles = cat.articles.select()
return response.render(dict(cat=cat, articles=articles))
This works as expected, however I've noticed that a different key is
generated for this two URLs:
/default/category/10
/default/category/10/
Notice one of the URLs has a trailing slash.
I'm using Redis for caching, and I've checked the stored keys and they are
different.
*The issue here is that both URLs produce the exact same content, but the
content is cached twice with different keys.*
In my case, the problem is even worst, because I add a slug to the URL with
the name of the category, like this:
/default/category/10/technology
In this case, the slug is added just to make the URL prettier, so it
doesn't really matter what is provided in the second argument. All these
URLs produce the exact same content:
/default/category/10
/default/category/10/
/default/category/10/technology
/default/category/10/anything-at-all
In a public website, a bot could send all types of random requests, thus
provoking the server to use a lot of RAM for caching several copies of the
same content.
So I'm wondering, wouldn't be nice to be able to specify the key? Or at
least be able to say which of the args should be consider to create the
key?
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/web2py/821c6951-f6c2-422a-a0bd-02f149c2ab61%40googlegroups.com.