There are 3 rules which are backed into the dispatcher regarding caching:
- Only the response of GET requests are cached.
- The requested file must have an extension
- The statuscode of the request must be 200.
And then there are other options you can configure, for example regarding paths, extensions etc.
Also the HTTP RFCs mention that only GET should be cached, because POST requests are designed to change status, and therefor caching their result and returning them on a different POST request will return inconsistent data.
If course you can build your own code into AEM to cache POST requests (or part of it), but by default neither AEM nor the Dispatcher support that. And in case of AEM as a Cloud Service also the CDN does not support it.