Content-Length is not possible because the final length of the page is not known ahead of time. That probably rules out ETag because that header is usually a hash of the content so you can't send that header after the content is output.
If-Modified-Since is not sent out by the server, rather it is sent by the browser to the server.
For the others, you'll probably want to look at a process module. Use the init_page() function and output the headers you want. I don't think there is a need to output more than one - Cache-Control is probably simplest:
class add_headers
{
function init_page()
{
header('Cache-Control: private,max-age=600'); // 10 minutes
}
}