Georg,

Thank you for comprehensive answers. I think the part about interaction 
between different types of middleware should go directly to Django's 
documentation.

Thanks,

Eugene

"hugo" <[EMAIL PROTECTED]> wrote in 
message news:[EMAIL PROTECTED]
>
> Hi,
>
>>1) If I want to use all 3 cache middlewares + session middleware, what is
>>the correct order now? Is this stack correct:
>
> They can have allmost any order you like, but you have to make sure
> that the cache middleware is after all middlwares that might change
> content depending on headers - for example the SessionMiddleware needs
> to come first. I would put them in in the following order:
>
> CommonMiddleware (handles the / and stuff and so does redirects)
> SessionMiddleware
> CacheMiddleware
> ConditionalGetMiddleware
> GZipMiddleware
>
> That way the / handling (redirecting to the / URL if the / is missing)
> is done first - it's redirecting and so doesn't need any of the other
> middlewares. Session are handled early on, because some other
> middleware or the view might depend on it - I think that one should go
> in as early as possible (for example the i18n middleware will make use
> of sessions if the middleware is loaded after the SessionMiddleware).
>
> Then the caching takes place. I moved the ConditionalGetMiddleware
> after it, because it depends on headers set in the CacheMiddleware -
> and using it before the CacheMiddleware will lead to problems, as those
> headers might not be set.
>
> The GZipMiddleware is last and after the cache, because it doesn't
> really change the content based on headers, it just changes the
> encoding - so the cache can merrily carry the uncompressed content and
> that way the cache _only_ will contain uncompressed content. If you
> have large pages that need to be compressed and so the recompressing
> takes too much resources, you might want to move it before the
> CacheMiddleware, as then the cache will store both compressed (for
> users that request it) and uncompressed pages.
>
>>2) If I want to use GZipMiddleware, do I have to specify that my response
>>depends on presence of 'gzip' in HTTP_ACCEPT_ENCODING? Is it done
>>automatically? If not, how to specify it?
>
> Yes, if you use the GZipMiddleware, pages are compressed if gzip is in
> the Accept-Encoding header of the request.
>
>>3) Do I have to define CACHE_MIDDLEWARE_GZIP? Or is it obsolete now?
>
> It is obsolete, now. If you don't want GZipping stuff, just don't load
> the middleare.
>
>>4) Is it possible to use GZipMiddleware without cache?
>
> Yes, of course. Every middleware can be used alone from the others.
> Just use the middleware you need, if you just need compression, just
> use the GZipMiddleware alone.
>
> Even the ConditionalGetMiddleware - but that one needs some headers to
> be present, so it might not work as good as you would like it without
> the CacheMiddleware. The reason being that without the CacheMiddleware,
> the view will allways have to run fully to produce a response and only
> then the ConditionalGetMiddleware can kick in (it needs the ETag or
> Last-Modified headers). So if you use it alone without the Cache, the
> view will still be run, only the transfer is reduced (but that might be
> usefull, too - for example in tight tranfer volume situations).
>
> All middlewares that produce/change the response based on headers will
> add those headers to the Vary resonse header. That way another cache in
> front of the project (like a transparent proxy or the proxy of the
> user) will handle caching correctly. So using the GZipMiddleware alone
> will make other proxies store pages in the cache based on the URI and
> the Accept-Encoding header. Using the SessionMiddleware will add the
> Cookie to the list of headers to base storage on.
>
> BTW: Django authentication is cookie based, so if your pages are
> different for each user (and different for anonymous from logged in
> users), you might want to use the @vary_on_cookie decorator on those
> views that are different per user to make sure that those views are
> cached based on the cookie header. Of course this manual decorating
> only needs to take place when you don't use the SessionMiddleware,
> because that alrady adds Cookie to the list of Vary headers.
>
> bye, Georg
>
> 



Reply via email to