Right now I'm base 64 encoding them and using data uris. The idea was that this will somehow lower the number of requests the browser needs to make. Does this bucket hold any water?
What is the best way of serving images in general? DB, from FS, S3?
I am most interested in python and java based answers, but all are welcome!
Data urls will definitely reduce the number of requests to the server, since the browser doesn't have to ask for the pixels in a separate request.  But they are not supported in all browsers.  You'll have to make the tradeoff.
What is the best way to serve small static images?