That's half by design. I think the fundamental question is: should CC be mutable or not? In Ruby, probably it should.

The more we talk about this, I think set_cache_control should also be more flexible in what it accepts. String|Hash|CacheControl