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 web2py+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/821c6951-f6c2-422a-a0bd-02f149c2ab61%40googlegroups.com.

Reply via email to