Браузеры могу спокойно игнорировать заголовки и кэшировать насмерть, например Safari в iOS кэширует даже POST, поэтому вариант с уникальным ключом не такое уж и плохое решение. Можно только не в queryString его пихать, а сделать частью url (`/path/to/${uniq-id}/my-file.txt`), вот это уже точно будет работать на все 146%.