При создании HTTP-сервера или HTTP-прокси вы, вероятно, заметите, что каждый отправленный HTTP-заголовок автоматически преобразуется в нижний регистр:

«X-запрос» будет «x-запрос»

Почему

В основном, когда был реализован HTTP-сервер узла, спецификация W3.org была взята за руководство. Если вы проверите спецификацию W3.org и взглянете на RFC 2616 (проверьте это там: https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html) в 4.2 Message Headers, там написано Имена полей нечувствительны к регистру.
Вот почему узел HTTP автоматически устанавливает для всех заголовков нижний регистр.

Получение необработанных заголовков

Однако он устанавливает для всех заголовков нижний регистр, Node предоставляет доступ к необработанным заголовкам (включая дубликаты) через `req.rawHeaders`. Поскольку req.rawHeaders — это массив (формат [HeaderName1, HeaderValue1, HeaderName2, HeaderValue2, …]), вам нужно будет перебрать его, чтобы найти искомые заголовки.
Для этого мы сделал генератор:

В действии:

Получить заголовки как объект:

На прокси

При реализации прокси-сервера все проксируемые запросы будут иметь свои заголовки HTTP «нижним регистром», но вы можете оставить их как есть, «взломав» объект в методе «getHeaders».

Он в основном перехватывает запрос, прежде чем действительно отправить его цели, и изменяет результат метода «getHeaders». Это заставит Node использовать те же заголовки исходного запроса.