I'm very aware that this etag handing won't make it lighter for the server. But it makes getting response still faster especially for mobile clients.

If you have easy way of validating for ETag content before actually generating the content on server, just move ETag content check stuff above the rsp_data = decorated function line. So the call to the decorated function will be completely avoided if you return results from that stage. Both of these options are designed to be only used with fully dynamic content. Both work well with templates and stuff.

It's recommended to use max-age=0 instead of no-cache for stuff which should be cached, but still could get quickly invalidated. ETags help with that.

I know, if you're using bottle.py with uWSGI or Nginx you can use internal gzip.