การจัดการคำขอ HTTP ใน Lua
เข้าถึงส่วนหัว เนื้อหา และอาร์กิวเมนต์ของคำขอ พร้อมสร้างผลตอบกลับด้วย API ของ ngx
การจัดการคำขอ HTTP ใน Lua เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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") เปลี่ยนเส้นทางภายในไปยังบล็อกตำแหน่งอื่นของ Nginx โดยไม่ต้องส่งคำขอ HTTP ไปกลับเพิ่มเติม
คำขอย่อย
ngx.location.capture("/api") ส่งคำขอย่อยไปยังตำแหน่งอื่น และส่งคืนตารางที่มีสถานะ ส่วนหัว และเนื้อหา
local res = ngx.location.capture("/internal/auth")
if res.status ~= 200 then
ngx.exit(403)
endการใช้บริบทคำขอร่วมกัน
ngx.ctx เป็นตารางต่อคำขอสำหรับใช้ข้อมูลร่วมกันระหว่างตัวจัดการระยะต่าง ๆ (access → content → log)
คำถามเกี่ยวกับการจัดการ HTTP
ฟังก์ชันใดใช้สำหรับอ่านพารามิเตอร์การสืบค้นของ URL ใน OpenResty
ทบทวน: การจัดการคำขอ HTTP
ใช้ฟังก์ชันของ ngx.req เพื่ออ่านเมธอด ส่วนหัว อาร์กิวเมนต์การสืบค้น และเนื้อหา กำหนด ngx.header และ ngx.status ก่อนเขียน ใช้ ngx.say/ngx.print สำหรับเอาต์พุต และใช้ ngx.ctx เพื่อแบ่งปันข้อมูลต่อคำขอ
คำถามที่พบบ่อย
บทเรียน “การจัดการคำขอ HTTP ใน Lua” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจัดการคำขอ HTTP ใน Lua” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดการคำขอ HTTP ใน Lua”
เข้าถึงส่วนหัว เนื้อหา และอาร์กิวเมนต์ของคำขอ พร้อมสร้างผลตอบกลับด้วย API ของ ngx คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การจัดการคำขอ HTTP ใน Lua” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สถาปัตยกรรม OpenResty
- การจัดการคำขอ HTTP ใน Lua
- Cosocket และ TCP แบบไม่บล็อก
- พจนานุกรมหน่วยความจำใช้ร่วมกัน