S3 does not set a default cache-control header, which means files you upload won’t be cached in the browser by default.
It is amazingly obscure how to do something as simple as setting the cache-control key in Amazon S3. The boto document seems to imply you could do this via key.set_metadata, but no, that won’t work because cache-control is not part of the metadata collection in the boto api. Instead, it’s part of the key attribute: http://boto.readthedocs.org/en/latest/ref/s3.html
I wrote a program to change the cache-control setting for all the objects in a s3 bucket.
First, you need to install boto.
pip install boto
Next, get the script from github. Modified the script to add in your AWS credential and bucket name, then run it:
python set_s3_cache_header.py
Good luck!
from boto.s3.connection import S3Connection
s3_conn = S3Connection(AWS_KEY, AWS_SECRET)
bucket = s3_conn.get_bucket(AWS_BUCKET_NAME)
bucket.make_public()
for key in bucket.list():
key = bucket.get_key(key.name)
key.cache_control = 'max-age=%d, public' % (3600 * 24 * 360 * 2)
print key.name + ' ' + key.cache_control