Lua中将所有头传递给后续http调用

我有 lua 代码来调用微服务。现在我使用

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']

#####并在此调用之后应用一些逻辑####

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']
    }
})

如何在不知道头文件名称的情况下以编程方式传递所有头文件?

点赞
用户2858170
用户2858170

ngx.req.get_headers() 返回一个头部信息的表。

如果你传递该表,则不需要知道头部名称。

顺便说一下,要引用特定的头部信息并不需要每次都调用该函数。

与其这样做:

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']

你可以这样做:

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']

将可能耗费时间的函数调用从6次减少至1次。

2018-02-27 07:05:52
用户3573263
用户3573263

如果有人想选择一个子集的标题:

local out = {}
local headers = ngx.req.get_headers() // 获取请求头

// 遍历请求头中的每一个key-value对,判断是否满足因定条件
for name, value in pairs(headers) do
    if some_condition(name) then // 自定义函数用于判断是否满足特定条件
        out[name] = value // 如果满足特定条件,将key-value对存入输出表out中
    end
end
2021-11-19 12:09:41