Ի՞նչ է CORS-ը և ինչու է այն կարևոր վեբ ծրագրավորման մեջ
CORS-ը (Cross-Origin Resource Sharing) մեխանիզմ է, որը սահմանում է, թե ինչպես կարող է բրաուզերը թույլատրել կամ արգելել հարցումներ տարբեր դոմեններից։ Եթե ձեր front-end-ը և back-end-ը գտնվում են տարբեր origin-ներում (օրինակ՝ տարբեր դոմեններ կամ պորտեր), ապա դուք անպայման կհանդիպեք CORS-ի հետ կապված խնդիրների։
Օրինակ՝ դուք ստեղծել եք React հավելված՝ որը աշխատում է http://localhost:3000-ում, իսկ API-ն գտնվում է http://localhost:5000-ում։ Եթե դուք փորձեք fetch անել տվյալներ, բրաուզերը կստուգի՝ արդյոք թույլատրվո՞ւմ է դա ըստ CORS քաղաքականության։
Ինչ է “Cross-Origin”
Երկու origin համարվում են տարբեր, եթե տարբեր են հետևյալներից որևէ մեկը՝
- Դոմենը (Domain)
- Պորտը (Port)
- Պրոտոկոլը (Protocol - HTTP vs HTTPS)
Օրինակ՝
http://example.comևhttp://api.example.com→ տարբեր origin-ներhttp://localhost:3000ևhttp://localhost:5000→ տարբեր origin-ներ
Ինչպես է աշխատում CORS-ը
Երբ բրաուզերը կատարում է cross-origin հարցում, այն նախ ուղարկում է “preflight” հարցում՝ օգտագործելով HTTP-ի OPTIONS մեթոդը։ Սա հնարավորություն է տալիս սերվերին պատասխանել՝ արդյոք այդ origin-ից հարցումները թույլատրելի են։
Սերվերը պատասխանելու դեպքում պետք է ուղարկի համապատասխան headers-ներ՝ օրինակ՝
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Եթե այդ headers-ները չկան կամ սխալ են, ապա բրաուզերը կբացասի հարցումը՝ նույնիսկ եթե սերվերը technically պատասխանել է։
Ինչպես լուծել CORS խնդիրը (օրինակ Node.js-ում)
// Express.js backend
const express = require("express");
const cors = require("cors");
const app = express();
app.use(cors({
origin: "http://localhost:3000", // թույլատրել միայն այս origin-ը
methods: ["GET", "POST", "PUT", "DELETE"],
credentials: true
}));
app.get("/data", (req, res) => {
res.json({ message: "Բարև frontend-ից!" });
});
app.listen(5000, () => console.log("Server is running on port 5000"));
Այս տեղադրման առավելությունները.
- Դուք վերահսկում եք, թե որ origin-ները կարող են մուտք գործել ձեր API
- Այն օգնում է անվտանգության բարձրացմանը
Հնարավոր սխալներ և լուծումներ
- “No ‘Access-Control-Allow-Origin’ header” — նշանակում է, որ սերվերը չի ուղարկել անհրաժեշտ CORS header-ը
- Preflight request failed — նշանակում է, որ OPTIONS հարցումը չի ընդունվել
- Credentials flag is true, but no ‘Access-Control-Allow-Credentials’ — եթե դուք փոխանցում եք cookies կամ headers, պետք է ավելացնել
credentials: trueև համապատասխան header-ներ
Եզրակացություն
CORS-ը պաշտպանական մեխանիզմ է, որը վերահսկում է՝ որ origin-ները կարող են մուտք գործել ձեր API-ները։ Թեև այն կարող է խանգարել զարգացման ընթացքում, ճիշտ կարգավորումն ապահովում է անվտանգություն և կանխում է չարտոնված մուտք։
Օգտագործելով ճիշտ Access-Control-Allow-* header-ները՝ դուք կարող եք ապահովել անվտանգ և արդյունավետ փոխազդեցություն ձեր front-end և back-end համակարգերի միջև։