Для последних 2 заголовков они вовсе не обязательны для совместимости с браузером. Эти заголовки используются как индикация предпочтений (Accept-Language) и оптимизация контента (If-Modified-Since).
request.setRequestHeader("Accept-Language", "en");
request.setRequestHeader("If-Modified-Since", lastRequestTime.toString());
Первый заголовок используется на стороне сервера, чтобы определить, был ли выполнен запрос из AJAX или просто с помощью навигации. Более старый браузер может не устанавливать этот заголовок по умолчанию, поэтому вы можете потерять совместимость браузера, если ваш сервер использует этот заголовок. Если ваш сервер не использует этот заголовок, вы не потеряете совместимость браузера, если он не установлен.
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
Обратите внимание, что первый заголовок должен быть X-Requested-With
, а не User-Agent
.