Tratamento de requisições HTTP em Lua
Acesse cabeçalhos, corpo e argumentos da requisição, e crie respostas com a API ngx.
Tratamento de requisições HTTP em Lua é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Leitura do método e da URI da solicitação
Acesse o método HTTP e a URI pelo namespace ngx.
-- content_by_lua_block
local method = ngx.req.get_method()
local uri = ngx.var.uri
ngx.say("Method: " .. method .. ", URI: " .. uri)Leitura dos cabeçalhos da solicitação
ngx.req.get_headers() retorna uma tabela com os cabeçalhos da solicitação.
local headers = ngx.req.get_headers()
local auth = headers["Authorization"]
if not auth then
ngx.status = 401
ngx.say("Unauthorized")
ngx.exit(ngx.HTTP_UNAUTHORIZED)
endLeitura dos parâmetros de consulta
ngx.req.get_uri_args() retorna uma tabela com os parâmetros de consulta da URL.
local args = ngx.req.get_uri_args()
local page = tonumber(args.page) or 1
local size = tonumber(args.size) or 20
ngx.say("Page: " .. page .. ", Size: " .. size)Leitura do corpo da solicitação
Leia o corpo da solicitação depois de chamar explicitamente ngx.req.read_body().
ngx.req.read_body()
local body = ngx.req.get_body_data()
if not body then
ngx.status = 400
ngx.say("Empty body")
return
endAnálise do corpo JSON
Use uma biblioteca JSON (por exemplo, cjson) para analisar o corpo da solicitação.
local cjson = require("cjson")
ngx.req.read_body()
local body = ngx.req.get_body_data()
local ok, data = pcall(cjson.decode, body)
if not ok then
ngx.status = 400
ngx.say("Invalid JSON")
return ngx.exit(400)
endDefinição dos cabeçalhos da resposta
Defina os cabeçalhos da resposta por meio de ngx.header antes de chamar ngx.say ou ngx.print.
ngx.header["Content-Type"] = "application/json"
ngx.header["X-Request-ID"] = ngx.var.request_idEscrita da resposta
ngx.say(s) escreve uma string e uma nova linha. ngx.print(s) escreve sem uma nova linha. ngx.exit(code) encerra a solicitação com o status HTTP fornecido.
ngx.status
Defina o código de status HTTP por meio de ngx.status = 404 antes de escrever o corpo da resposta.
ngx.status = 404
ngx.header["Content-Type"] = "application/json"
ngx.say(cjson.encode({error = "Not Found"}))Redirecionamentos internos
ngx.exec("/other/path") realiza um redirecionamento interno para outro bloco de localização do Nginx sem uma nova viagem HTTP.
Subsolicitações
ngx.location.capture("/api") faz uma subsolicitação para outra localização e retorna uma tabela com status, cabeçalhos e corpo.
local res = ngx.location.capture("/internal/auth")
if res.status ~= 200 then
ngx.exit(403)
endCompartilhamento do contexto da solicitação
ngx.ctx é uma tabela por solicitação para compartilhar dados entre diferentes manipuladores de fase (acesso → conteúdo → log).
Pergunta sobre tratamento HTTP
Qual função lê os parâmetros de consulta da URL no OpenResty?
Recapitulação: tratamento de solicitações HTTP
Use as funções de ngx.req para ler o método, os cabeçalhos, os argumentos de consulta e o corpo. Defina ngx.header e ngx.status antes de escrever. Use ngx.say/ngx.print para a saída. Compartilhe dados por solicitação por meio de ngx.ctx.
Perguntas Frequentes
A aula “Tratamento de requisições HTTP em Lua” é grátis?
Sim — o texto completo de “Tratamento de requisições HTTP em Lua” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Tratamento de requisições HTTP em Lua”?
Acesse cabeçalhos, corpo e argumentos da requisição, e crie respostas com a API ngx. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Tratamento de requisições HTTP em Lua”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Arquitetura do OpenResty
- Tratamento de requisições HTTP em Lua
- Cosockets e TCP sem bloqueio
- Dicionários de memória compartilhada