paramupk
paramupk

Reputation: 626

Pass all headers to subsequent http call Lua

I have lua code to call microservices. Now I use

local requestId = ngx.req.get_headers()['X-Request-Id']
local host = ngx.req.get_headers()['Host']
local xForwardedProto = ngx.req.get_headers()['X-Forwarded-Proto']
local xForwardedPort = ngx.req.get_headers()['X-Forwarded-Port']
local xForwardedFor = ngx.req.get_headers()['X-Forwarded-For']
local xRealIP = ngx.req.get_headers()['X-Real-IP']

#####and some logic after that call####

local res = httpc:request_uri(targetURL, {
    method = "GET",
    ssl_verify = false,
    headers = {
        ["Authorization"] = "Bearer " .. ngx.var.unique_token,
        ["X-Request-Id"] = requestId,
        ["Cache-Control"] = ngx.req.get_headers()['Cache-Control']
    }
})

How can I programmatically pass all headers without knowing the header name?

Upvotes: 2

Views: 1093

Answers (2)

Richard Tingstad
Richard Tingstad

Reputation: 425

If someone wants to e.g. select a sub set of the headers:

local out = {}
local headers = ngx.req.get_headers()
for name, value in pairs(headers) do
    if some_condition(name) then
        out[name] = value
    end
end

Upvotes: 1

Piglet
Piglet

Reputation: 28940

ngx.req.get_headers() returns a table of headers.

If you pass that table you don't have to know the header names.

It is not necessary to call that function every time you want to reference a specific header btw.

Instead of

local requestId = ngx.req.get_headers()['X-Request-Id']
local host = ngx.req.get_headers()['Host']
local xForwardedProto = ngx.req.get_headers()['X-Forwarded-Proto']
local xForwardedPort = ngx.req.get_headers()['X-Forwarded-Port']
local xForwardedFor = ngx.req.get_headers()['X-Forwarded-For']
local xRealIP = ngx.req.get_headers()['X-Real-IP']

You can do something like

local headers = ngx.req.get_headers()
local requestId = headers['X-Request-Id']
local host = headers['Host']
local xForwardedProto = headers['X-Forwarded-Proto']
local xForwardedPort = headers['X-Forwarded-Port']
local xForwardedFor = headers['X-Forwarded-For']
local xRealIP = headers['X-Real-IP']

reducing the number of possibly time consuming function calls from 6 to 1.

Upvotes: 0

Related Questions