Jim*_*ies 10 ruby sinatra http-headers
我试图访问sinatra过滤器中的标头.我的请求包括标题"HTTP_AUTH",但我无法访问它.我的过滤器是
before do
halt 403 unless request['HTTP_AUTH'] == 'test'
end
Run Code Online (Sandbox Code Playgroud)
它从我的机架测试中正常工作.
browser.get '/mypath', "CONTENT_TYPE" => "application/json", "HTTP_AUTH" => 'test'
Run Code Online (Sandbox Code Playgroud)
但是当我从其他来源尝试时,我无法访问它.如果我puts request.env可以看到令牌在请求中,但我无法访问它.
"HTTP_CONNECTION"=>"close",
"HTTP_AUTH"=>"test",
"HTTP_ACCEPT"=>"application/json",
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
小智 32
我只是想补充说,如果你使用headers它将不会显示自定义标题.例如,我设置了一个名为X-CSRF-Token的自定义标头,我在每个AJAX请求中发送该标头,并且这个标头不会显示在该哈希中.如果您需要访问自定义标题,您可以通过以下方式找到它们request.env:
post '/' do
header_token = request.env["HTTP_X_CSRF_TOKEN"]
end
Run Code Online (Sandbox Code Playgroud)
(注意架子如何将X-CSRF-Token更改为HTTP_X_CSRF_TOKEN)
Зел*_*ный 12
尝试使用方法before块headers:
before do
headers "HTTP_AUTH" => "test"
headers "Content-Type" => "text/html; charset=utf-8"
end
Run Code Online (Sandbox Code Playgroud)
或在请求中:
get '/' do
headers['HTTP_AUTH'] = "test"
headers['Cache-Control'] = 'public, max-age=600'
puts headers # show headers on this request
end
Run Code Online (Sandbox Code Playgroud)
使用headers就是hash