The Server-Timing API: https://www.w3.org/TR/server-timing/ has been available for some time in several browsers. While it's base use case is to expose server-side times to the client, it can also be used to pass arbitrary values. Which makes, to my knowledge, the only way to actually read custom headers from JS.
This is how we could essentially collect the hit/miss information currently exposed in the x-cache-status header in NavigationTiming, if we were to serve is as a Server-Timing header instead (or in addition to it).