0Pricing
Lua Academy · Урок

Обработка HTTP-запросов в Lua

Получайте заголовки, тело и аргументы запроса и формируйте ответы с помощью API ngx.

«Обработка HTTP-запросов в Lua» — бесплатный урок Lua Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Чтение метода и URI запроса

Получите метод HTTP и URI из пространства имён ngx.

-- content_by_lua_block
local method = ngx.req.get_method()
local uri    = ngx.var.uri
ngx.say("Method: " .. method .. ", URI: " .. uri)

Чтение заголовков запроса

ngx.req.get_headers() возвращает таблицу заголовков запроса.

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)
end

Чтение параметров запроса

ngx.req.get_uri_args() возвращает таблицу параметров запроса 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)

Чтение тела запроса

Прочитайте тело запроса после явного вызова 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
end

Разбор тела JSON

Используйте библиотеку JSON, например cjson, чтобы разобрать тело запроса.

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)
end

Установка заголовков ответа

Установите заголовки ответа через ngx.header до вызова ngx.say или ngx.print.

ngx.header["Content-Type"] = "application/json"
ngx.header["X-Request-ID"] = ngx.var.request_id

Запись ответа

ngx.say(s) записывает строку и перевод строки. ngx.print(s) записывает строку без перевода строки. ngx.exit(code) завершает запрос с указанным статусом HTTP.

ngx.status

Установите код статуса HTTP через ngx.status = 404 до записи тела ответа.

ngx.status = 404
ngx.header["Content-Type"] = "application/json"
ngx.say(cjson.encode({error = "Not Found"}))

Внутренние перенаправления

ngx.exec("/other/path") выполняет внутреннее перенаправление к другому блоку location Nginx без дополнительного обмена данными по HTTP.

Вложенные запросы

ngx.location.capture("/api") отправляет вложенный запрос к другому location и возвращает таблицу со статусом, заголовками и телом.

local res = ngx.location.capture("/internal/auth")
if res.status ~= 200 then
  ngx.exit(403)
end

Общий контекст запроса

ngx.ctx — это таблица для каждого запроса, предназначенная для обмена данными между обработчиками разных фаз (доступ → содержимое → log).

Вопрос об обработке HTTP

Какая функция считывает параметры запроса URL в OpenResty?

Итоги: обработка HTTP-запросов

Используйте функции ngx.req, чтобы читать метод, заголовки, параметры запроса и тело. Устанавливайте ngx.header и ngx.status до записи ответа. Используйте ngx.say/ngx.print для вывода. Обменивайтесь данными запроса через ngx.ctx.

Часто задаваемые вопросы

Урок «Обработка HTTP-запросов в Lua» бесплатный?

Да — полный текст урока «Обработка HTTP-запросов в Lua» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Обработка HTTP-запросов в Lua»?

Получайте заголовки, тело и аргументы запроса и формируйте ответы с помощью API ngx. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Обработка HTTP-запросов в Lua»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Архитектура OpenResty
  2. Обработка HTTP-запросов в Lua
  3. Сокеты-сопрограммы и неблокирующий TCP
  4. Словари общей памяти
← Назад к Lua Academy