request.headers
non restituisce un hash, ma un'istanza di ActionDispatch::Http::Headers
, che è un wrapper attorno al rack env.
ActionDispatch::Http::Headers
implementa molti metodi come []
e []=
che lo rendono comportarsi come un hash, ma non ignorare l'impostazione predefinita inspect
, quindi non è possibile vedere le coppie chiave-valore di appena p
o pp
esso.
È possibile, tuttavia, vedere le intestazioni di richiesta nella ENV rack:
pp request.headers.env.select{|k, _| k =~ /^HTTP_/}
ricordare che le intestazioni di richiesta in env cremagliera sono il upcase
d, underscore
d e HTTP_
versione prefissata delle intestazioni di richiesta originale http .
UPDATE
realtà ci sono un insieme finito di header di richiesta che non sono preceduti HTTP_
. Questi nomi di intestazione (maiuscola e sottolineata) sono memorizzati in ActionDispatch::Http::Headers::CGI_VARIABLES
. Io li elenco qui sotto:
AUTH_TYPE
CONTENT_LENGTH
CONTENT_TYPE
GATEWAY_INTERFACE
HTTPS
PATH_INFO
PATH_TRANSLATED
QUERY_STRING
REMOTE_ADDR
REMOTE_HOST
REMOTE_IDENT
REMOTE_USER
REQUEST_METHOD
SCRIPT_NAME
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
Così la versione completa di sfogliare intestazioni di richiesta sarebbe
pp request.headers.env.select{|k, _| k.in?(ActionDispatch::Http::Headers::CGI_VARIABLES) || k =~ /^HTTP_/}
sembra 'richiesta.anche le intestazioni ['HTTP_MY_HEADER'] 'funzionerebbero. – 23inhouse