Internet browsers and proxy servers can cache Internet pages. This means that keep a local copy and once the same page is requested again, they provide the local copy rather than getting the page from the original server. This is very useful for static pages since it reduces the net traffic significantly.
Caching is however a real problem for dynamic Web applications. It can result in very strange behavior of Web applications and it is difficult to find out such a problem. For example if a page is generated personally for a certain user a proxy cache could deliver the same page to someone else. If a page is designed to change upon user interaction the user could get an old copy of the page, not reflecting any changes.
On the other hand there are many applications where caching is very beneficial, even if the pages are generated dynamically. For example a typical product catalog generated from a database is cacheable.
Because of the big problems with cached application pages heitml per default disables caching of the pages generated. Using the expire component caching can be activated for a certain page that contains the expire tag.
You should switch on caching if the page content is fixed for at least several hours. The page can contain database content as long as the database does not change frequently and as long as the user can not change the content of the database. Do not use condbrowser or any other component that changes the page based on the requesting user/browser in cacheable pages.
Please note that page caches look at the complete URL including parameters. So if a page always has the same content for the same URL parameters you can mark it cacheable.