What's the difference between setting cache with {% header %} tag and {% cache %} tag?
The header tag sets an HTTP response header, which may be used to (among other things) tell the browser that the response content is "cacheable".

The cache tag tells Craft to cache the generated HTML on the server side (as a file).