Setting cache-cotrol header for Amazon S3 key using boto

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:

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:


Good luck!

Following is some code snippet from the script:

    from boto.s3.connection import S3Connection

    s3_conn = S3Connection(AWS_KEY, AWS_SECRET)

    bucket = s3_conn.get_bucket(AWS_BUCKET_NAME)


    for key in bucket.list():
        key = bucket.get_key(
        key.cache_control = 'max-age=%d, public' % (3600 * 24 * 360 * 2)
        print + ' ' +  key.cache_control