Según la documentación, request.META es un "diccionario estándar de Python que contiene todos los encabezados HTTP disponibles". Si quieres conseguir todo los encabezados, simplemente puede recorrer el diccionario.
La parte de su código para hacer esto depende de sus requisitos exactos. Cualquier lugar al que tenga acceso requestdebería hacerlo.
Actualizar
Necesito acceder a él en una clase de Middleware, pero cuando lo repito, obtengo muchos valores además de los encabezados HTTP.
De la documentación:
Con la excepción de CONTENT_LENGTHy CONTENT_TYPE, como se indicó anteriormente, los HTTPencabezados de la solicitud se convierten en METAclaves convirtiendo todos los caracteres a mayúsculas, reemplazando los guiones con guiones bajos y agregando un HTTP_prefijo al nombre .
(Énfasis añadido)
Para obtener HTTPsolo los encabezados, simplemente filtre por claves con el prefijoHTTP_ .
Actualización 2
¿Podría mostrarme cómo podría construir un diccionario de encabezados filtrando todas las claves de la variable request.META que comienza con HTTP_ y elimina la parte principal de HTTP_?
Por supuesto. He aquí una forma de hacerlo.
import re
regex = re.compile('^HTTP_')
dict((regex.sub('', header), value) for (header, value)
in request.META.items() if header.startswith('HTTP_'))