Respect content-negotiation in Breeze
At present, Breeze does not respect content-negotiation, which impacts plugins like the Automattic ActivityPub plugin which serves different content-types from the same path depending on the "Accept" header. Instead, whatever content-type was requested first "wins". This results in either people seeing JSON instead of HTML in their browser, or Fediverse clients being served HTML instead of JSON.
Some WordPress page-caching plugins do have explicit support for the "Vary" and "Accept" headers, including WP Super Cache, Cachify, and Surge. These plugins won't cache non-HTML versions of a page, and they don't accidentally serve the HTML version to non-HTML user-agents. So their code may be a good reference point for implementation.