I think you and Douglas are talking about different things there, Serge - in the same way that the two questions you cited are actually about specific different aspects of the system.
As you’ve said, cache headers can be sent by PHP, and that’s what Matrix does (with an exception that I’ll discuss below). This is controlled from the Cache Manager asset, which has a few different levels:
https://matrix.squiz.net/manuals/system-management/chapters/cache-manager#cache-options
https://matrix.squiz.net/manuals/system-management/chapters/cache-manager#Type-Code-Specific-Screen
https://matrix.squiz.net/manuals/system-management/chapters/cache-manager#Root-Node-Specific-Screen
As far as I’m aware, the order of precedence there is that Type Code specific settings override Root Node specific settings which override the baseline Cache Options.
What Douglas is referring to is specifically regarding FIle assets (and descendant types) where Unrestricted Access is set to Yes, status is Live and Public User read permissions have been granted. This triggers a specific performance optimisation in Matrix, where the file is hardlinked into the data/public directory.
The data/public directory is served as the /__data/ URL directly from the webserver, cutting out all PHP code execution. While this is much more efficient performance-wise than having to execute Matrix PHP code just to serve a file that had no access restrictions anyway, it does mean that you do need to set cache headers for that directory in the webserver configuration. This is the directive you’re seeing in the server config.