Obsługa żądań HTTP w Lua
Proszę uzyskiwać dostęp do nagłówków, treści i argumentów żądania oraz tworzyć odpowiedzi za pomocą API ngx.
Obsługa żądań HTTP w Lua to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Odczytywanie metody i URI żądania
Metodę HTTP i URI można odczytać z przestrzeni nazw ngx.
-- content_by_lua_block
local method = ngx.req.get_method()
local uri = ngx.var.uri
ngx.say("Method: " .. method .. ", URI: " .. uri)Odczytywanie nagłówków żądania
ngx.req.get_headers() zwraca tabelę nagłówków żądania.
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)
endOdczytywanie parametrów zapytania
ngx.req.get_uri_args() zwraca tabelę parametrów zapytania 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)Odczytywanie treści żądania
Treść żądania należy odczytać po jawnym wywołaniu 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
endAnalizowanie treści JSON
Do analizowania treści żądania należy użyć biblioteki JSON (np. 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)
endUstawianie nagłówków odpowiedzi
Nagłówki odpowiedzi należy ustawić za pomocą ngx.header przed wywołaniem ngx.say lub ngx.print.
ngx.header["Content-Type"] = "application/json"
ngx.header["X-Request-ID"] = ngx.var.request_idZapisywanie odpowiedzi
ngx.say(s) zapisuje ciąg znaków i znak nowego wiersza. ngx.print(s) zapisuje dane bez znaku nowego wiersza. ngx.exit(code) kończy żądanie z podanym statusem HTTP.
ngx.status
Kod statusu HTTP należy ustawić za pomocą ngx.status = 404 przed zapisaniem treści odpowiedzi.
ngx.status = 404
ngx.header["Content-Type"] = "application/json"
ngx.say(cjson.encode({error = "Not Found"}))Przekierowania wewnętrzne
ngx.exec("/other/path") wykonuje wewnętrzne przekierowanie do innego bloku lokalizacji Nginx bez dodatkowego obiegu żądania HTTP.
Podżądania
ngx.location.capture("/api") wysyła podżądanie do innej lokalizacji i zwraca tabelę zawierającą status, nagłówki oraz treść.
local res = ngx.location.capture("/internal/auth")
if res.status ~= 200 then
ngx.exit(403)
endUdostępnianie kontekstu żądania
ngx.ctx to tabela dostępna w ramach jednego żądania, służąca do udostępniania danych między modułami obsługującymi różne fazy (access → content → log).
Pytanie dotyczące obsługi HTTP
Jaka funkcja odczytuje parametry zapytania URL w OpenResty?
Podsumowanie: obsługa żądań HTTP
Funkcji ngx.req należy używać do odczytywania metody, nagłówków, argumentów zapytania i treści żądania. ngx.header i ngx.status należy ustawić przed zapisaniem odpowiedzi. Do generowania danych wyjściowych służą ngx.say/ngx.print. Dane dostępne w ramach jednego żądania można udostępniać za pomocą ngx.ctx.
Często zadawane pytania
Czy lekcja „Obsługa żądań HTTP w Lua” jest bezpłatna?
Tak — pełny tekst „Obsługa żądań HTTP w Lua” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Obsługa żądań HTTP w Lua”?
Proszę uzyskiwać dostęp do nagłówków, treści i argumentów żądania oraz tworzyć odpowiedzi za pomocą API ngx. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Obsługa żądań HTTP w Lua”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Architektura OpenResty
- Obsługa żądań HTTP w Lua
- Cosockety i nieblokujący TCP
- Słowniki pamięci współdzielonej