Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

NextRequestNextResponsecookiesredirectheaders

~2 دقیقه مطالعه • بروزرسانی ۲۰ آذر ۱۴۰۴

۱. NextRequest چیست؟


NextRequest نسخه گسترش‌یافته‌ای از Web Request API است که شامل متدهای اختصاصی برای خواندن و تغییر کوکی‌ها و دسترسی به ویژگی‌های URL در Next.js می‌باشد.


متدهای کوکی:

  • set(name, value): تنظیم کوکی روی درخواست
  • get(name): دریافت مقدار کوکی
  • getAll(name?): دریافت همه کوکی‌ها یا همه با نام خاص
  • delete(name): حذف کوکی
  • has(name): بررسی وجود کوکی
  • clear(): حذف همه کوکی‌ها از درخواست

ویژگی‌های URL:

  • nextUrl.pathname: مسیر درخواست
  • nextUrl.searchParams: پارامترهای کوئری
  • basePath و buildId: اطلاعات متادیتای اپلیکیشن

۲. NextResponse چیست؟


NextResponse نسخه گسترش‌یافته‌ای از Web Response API است که شامل متدهایی برای تنظیم کوکی، پاسخ JSON، ریدایرکت، بازنویسی مسیر و ارسال هدرهای سفارشی می‌باشد.


متدهای کوکی:

  • set(name, value): تنظیم کوکی روی پاسخ
  • get(name): دریافت مقدار کوکی
  • getAll(name?): دریافت همه کوکی‌ها یا همه با نام خاص
  • delete(name): حذف کوکی از پاسخ

ابزارهای پاسخ‌دهی:

  • json(data, options): ارسال پاسخ JSON
  • redirect(url): ریدایرکت به مسیر دیگر
  • rewrite(url): بازنویسی مسیر بدون تغییر URL مرورگر
  • next(): ادامه مسیر (مناسب برای پراکسی و middleware)

۳. ارسال امن هدرها


برای ارسال هدرها به صورت امن، از allow-list استفاده کنید و فقط هدرهای مطمئن را منتقل نمایید:

const incoming = new Headers(request.headers)
const forwarded = new Headers()

for (const [name, value] of incoming) {
  const headerName = name.toLowerCase()
  if (
    !headerName.startsWith('x-') &&
    headerName !== 'authorization' &&
    headerName !== 'cookie'
  ) {
    forwarded.set(name, value)
  }
}

return NextResponse.next({ request: { headers: forwarded } })

۴. ریدایرکت با پارامترهای سفارشی


می‌توانید مسیر ریدایرکت را با استفاده از request.nextUrl تغییر دهید:

const loginUrl = new URL('/login', request.url)
loginUrl.searchParams.set('from', request.nextUrl.pathname)
return NextResponse.redirect(loginUrl)

۵. بازنویسی مسیر با rewrite()


برای پراکسی کردن مسیر بدون تغییر URL مرورگر از NextResponse.rewrite() استفاده کنید:

return NextResponse.rewrite(new URL('/proxy', request.url))

جمع‌بندی


NextRequest و NextResponse ابزارهایی قدرتمند برای کنترل دقیق کوکی‌ها، هدرها، مسیرها و پاسخ‌ها در Next.js هستند. با استفاده از آن‌ها می‌توانید تجربه‌ای شخصی‌سازی‌شده، امن و بهینه برای کاربران خود بسازید.


نوشته و پژوهش شده توسط دکتر شاهین صیامی