Page get parameter doesn’t work with is_single() function

The truth is when send_headers action is processing, the $wp_query isn’t ready yet and you can’t use is_single() function. But you can use it a bit later. There is a parse_query action, that can help you. It starts when the $wp_query is ready and comes out right after the send_headers action.