Ի՞նչ է CORS-ը
Ի՞նչ է CORS-ը և ինչու է այն կարևոր վեբ ծրագրավորման մեջ
CORS-ը (Cross-Origin Resource Sharing) մեխանիզմ է, որը սահմանում է, թե ինչպես կարող է բրաուզերը թույլատրել կամ արգելել հարցումներ տարբեր դոմեններից։ Եթե ձեր front-end-ը և back-end-ը գտնվում են տարբեր origin-ներում (օրինակ՝ տարբեր դոմեններ կամ պորտեր), ապա դուք անպայման կհանդիպեք CORS-ի հետ կապված խնդիրների։
Օրինակ՝ դուք ստեղծել եք React հավելված՝ որը աշխատում է http://localhost:3000
-ում, իսկ API-ն գտնվում է http://localhost:5000
-ում։ Եթե դուք փորձեք fetch անել տվյալներ, բրաուզերը կստուգի՝ արդյոք թույլատրվո՞ւմ է դա ըստ CORS քաղաքականության։
Երկու origin համարվում են տարբեր, եթե տարբեր են հետևյալներից որևէ մեկը՝
Օրինակ՝
http://example.com
և http://api.example.com
→ տարբեր origin-ներhttp://localhost:3000
և http://localhost:5000
→ տարբեր origin-ներԵրբ բրաուզերը կատարում է 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 պատասխանել է։
// 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"));
Այս տեղադրման առավելությունները.
credentials: true
և համապատասխան header-ներCORS-ը պաշտպանական մեխանիզմ է, որը վերահսկում է՝ որ origin-ները կարող են մուտք գործել ձեր API-ները։ Թեև այն կարող է խանգարել զարգացման ընթացքում, ճիշտ կարգավորումն ապահովում է անվտանգություն և կանխում է չարտոնված մուտք։
Օգտագործելով ճիշտ Access-Control-Allow-*
header-ները՝ դուք կարող եք ապահովել անվտանգ և արդյունավետ փոխազդեցություն ձեր front-end և back-end համակարգերի միջև։