Bosh sahifa Wiki Preflight request

Preflight request

Preflight request — brauzerning ayrim cross-origin HTTP so‘rovlaridan oldin serverdan ruxsat va qo‘llanadigan metod hamda sarlavhalarni tekshirish uchun yuboradigan OPTIONS so‘rovi. U Cross-Origin Resource Sharing mexanizmining bir qismidir. Brauzer preflight natijasi mos bo‘lsa asosiy so‘rovni yuboradi; mos bo‘lmasa JavaScript so‘rovni davom ettirmaydi. Preflight server autentifikatsiyasi yoki CSRF himoyasining o‘rnini bosmaydi.

Qachon yuboriladi

“Simple request” talablariga mos bo‘lmagan cross-origin so‘rov odatda preflight talab qiladi. Masalan, PUT yoki DELETE metodi, Authorization sarlavhasi, maxsus X-* sarlavha yoki application/json Content-Type preflightga sabab bo‘lishi mumkin. GET, HEAD, POST ham faqat ruxsat etilgan safelisted sarlavha va content type bilan simple hisoblanadi.

Brauzerning preflight yuborishi so‘rov xavfsiz degani emas. Oddiy HTML formasi application/x-www-form-urlencoded bilan cross-site POST yubora oladi va bunda preflight bo‘lmasligi mumkin. Shu sababli server state-changing amalni faqat “OPTIONS ko‘rdim” degan shart bilan himoya qilmaydi.

So‘rov va javob

Brauzer taxminan quyidagi so‘rovni yuboradi:

OPTIONS /api/items HTTP/1.1
Origin: https://app.example.uz
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: authorization, content-type

Server ruxsat etsa, javobda origin, metod va sarlavhalarni ko‘rsatadi:

Access-Control-Allow-Origin: https://app.example.uz
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Headers: Authorization, Content-Type
Access-Control-Max-Age: 600

Brauzer qiymatlarni asosiy so‘rov bilan solishtiradi. Javobning 2xx bo‘lishi o‘zi yetarli emas. Access-Control-Allow-Origin aniq origin yoki credential ishlatilmaydigan holatda * bo‘lishi mumkin. Cookie yoki HTTP credential bilan so‘rovda wildcard origin qabul qilinmaydi va Access-Control-Allow-Credentials: true talab etiladi.

Server konfiguratsiyasi

Origin allowlist to‘liq scheme, host va port asosida tekshiriladi. endsWith("example.uz") kabi sodda tekshiruv evil-example.uzni ham qabul qilishi mumkin. So‘rovdagi Origin qiymatini hech qanday allowlistsiz javobga qaytarish har qanday saytga o‘qish ruxsatini beradi. Dynamic javobda cache boshqa origin siyosatini aralashtirmasligi uchun Vary: Origin ishlatiladi.

Preflight endpoint ko‘pincha application routingdan oldin proxy yoki CORS middleware tomonidan javoblanadi. Auth middleware OPTIONSni login sahifasiga redirect qilsa, brauzer CORS xatosi ko‘rsatishi mumkin. Shu bilan birga, preflightga ruxsat berish asosiy PUT amaliga ruxsat berish emas; asosiy so‘rov token, scope va obyekt authorizationidan o‘tadi.

Cache va diagnostika

Access-Control-Max-Age brauzerga preflight natijasini vaqtincha cache qilish imkonini beradi. Brauzerlar maksimal muddatga o‘z cheklovini qo‘yishi mumkin. Siyosat tez-tez o‘zgaradigan yoki origin ruxsati bekor qilinishi muhim tizimda juda uzun muddat eski ruxsatni saqlaydi. CDN OPTIONS javobini cache qilsa, Origin va request headers bo‘yicha to‘g‘ri variation talab qilinadi.

JavaScript ko‘pincha aniq sababni emas, umumiy CORS xatosini oladi. Browser developer tools preflight so‘rovi, response header va bloklash sababini ko‘rsatadi. curl CORSni majburan qo‘llamaydi; u headerlarni ko‘rish uchun foydali, ammo brauzer xatti-harakatini to‘liq takrorlamaydi.

Private Network Access

Public saytdan foydalanuvchining lokal yoki private tarmoq manziliga brauzer so‘rovi alohida xavf tug‘diradi. Private Network Access tashabbusidagi brauzerlar ayrim holatda qo‘shimcha preflight va server roziligini talab qilishi mumkin. Bu xatti-harakat browser versiyasiga qarab rivojlanadi. Router yoki intranet xizmati faqat “tashqaridan bevosita ochiq emas” degan taxmin bilan access controlni tashlamaydi va DNS rebinding hamda Origin tekshiruvini hisobga oladi.

Redirect va xatolar

Preflight yoki undan keyingi asosiy so‘rov redirect qilinsa, browserning CORS talqini URL va versiyaga qarab murakkablashadi. API canonical endpointni bevosita qaytaradi, HTTPdan HTTPSga o‘tish esa so‘rov boshlanishidan oldin to‘g‘ri URL bilan bajariladi. Error response’larda ham kerakli CORS header bo‘lmasa, frontend haqiqiy 401 yoki 500 body o‘rniga faqat umumiy network xatosini ko‘radi.

Bog‘liq tushunchalar

CORS, OPTIONS, Origin header, Same-origin policy, Access-Control-Allow-Origin, CSRF, HTTP headers