del*_*pha 12 ruby ruby-on-rails rails-api
我有一个在Rails中开发的应用程序,我试图在HTTP标头中查看属性.
有没有办法阅读这些属性?它们存放在哪里?
有人提到过request.headers.它是否正确?我无法在此数组中看到任何属性.
Aet*_*rus 34
request.headers不返回哈希,而是返回一个实例ActionDispatch::Http::Headers,它是机架环境的包装器.
ActionDispatch::Http::Headers实现了许多方法[],[]=这些方法使得它的行为类似于哈希,但它不会覆盖默认值inspect,因此您无法通过它p或pp它来查看键值对.
但是,您可以在机架环境中查看请求标头:
pp request.headers.env.select{|k, _| k =~ /^HTTP_/}
Run Code Online (Sandbox Code Playgroud)
请记住,机架env中的请求标头是原始http请求标头的upcased,underscored和HTTP_前缀版本.
实际上有一组有限的请求头没有前缀HTTP_.这些(大写和下划线)标题名称存储在ActionDispatch::Http::Headers::CGI_VARIABLES.我在下面列出它们:
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
Run Code Online (Sandbox Code Playgroud)
所以列表请求标题的完整版本将是
pp request.headers.env.select{|k, _| k.in?(ActionDispatch::Http::Headers::CGI_VARIABLES) || k =~ /^HTTP_/}
Run Code Online (Sandbox Code Playgroud)
我注意到在Rails 5中,他们现在希望标题在请求中的拼写如下:
Access-Token
在将它们转换为之前:
HTTP_ACCESS_TOKEN
在Rails中。这样做ACCESS_TOKEN将不再起作用。