Vary: Accept does not make resources uncacheable. If you are experiencing this problem, either your caching headers are misconfigured or your client is behaving incorrectly.
The alternative of creating unique URLs is incredibly simple and has worked perfectly since the start of the web. Content negotiation is an interesting idea but it's just not worth the support cost.
- Chris