Sida loo hagaajiyo khaladaadka CORS (iyo sababta ay u dhacaan)
Khalad CORS macnaheedu waa bogga web-kaagu wuxuu isku dayay inuu akhriyo jawaab ka timid origin kale (domain, port ama protocol kale), server-kaasna ma uusan soo dirin headers sheegaya in ay oggolaan tahay. Browser-yadu jawaabta way xannibaan si ay isticmaaleyaasha u ilaaliyaan. Waxaad hagaajisaa server-ka, adigoo soo celinaya header Access-Control-Allow-Origin origin-ka site-kaaga iyo adigoo maamulaya codsiyada preflight ee OPTIONS, ama waad ka fogaatay adigoo codsiga ku diraya backend-kaaga oo ku jira origin isku mid ah.
Waa mid ka mid ah khaladaadka ugu jahawareeriya horumarinta web-ka sababtoo ah codsiga badanaa server-ka si fiican ayuu u gaaraa. Hagahan wuxuu sharaxayaa waxa dhacaya iyo sida mid kasta loo hagaajiyo.
Micnaha "origin"
Origin waa isku-darka protocol-ka, domain-ka iyo port-ka:
| URL | Origin |
|---|---|
https://myapp.com/dashboard | https://myapp.com |
https://api.myapp.com/users | https://api.myapp.com (subdomain kale, sidaas darteed origin kale) |
http://localhost:5173 | http://localhost:5173 |
http://localhost:3000 | http://localhost:3000 (port kale, sidaas darteed origin kale) |
Browser-yadu waxay raacaan same-origin policy: JavaScript-ka bog ayaa si xor ah uga akhrin kara jawaabaha origin-kiisa, laakiin ma uu akhrin karo kuwa kale. CORS (Cross-Origin Resource Sharing) waa nidaamka server-ku ku ogolaado: “jawaabahayga bogagga ka yimid origins-kan waa ay akhriyi karaan.”
Labo natiijo oo dadka yaabiya:
- Codsigu badanaa server-ka wuu gaaraa. CORS badanaa waxay xannibaa code-kaaga inuu akhriyo jawaabta, ma aha server-ka inuu helo codsiga. POST waa laga yaabaa in la kaydiyay in kastoo aad qalad aragtay.
- Browser-yada kaliya ayaa fuliya. curl, Postman iyo code-ka server-ka dhinaca ayaa gebi ahaanba iska indha tiraya CORS. Sidaas darteed “waxay ku shaqeysaa Postman-ka” ma sheegayo waxba oo ku saabsan CORS.
Tallaabo 1: Akhri qaladka saxda ah
Fur developer tools (midig-riix → Inspect), u gudub Console, oo akhri fariinta oo dhan. Qoraalka Chrome wuxuu kuu sheegayaa dhibaatada aad leedahay:
| Fariintu waxay ka kooban tahay | Waxa khaldan |
|---|---|
No 'Access-Control-Allow-Origin' header is present | Server-ku uma uu soo dirin header-ka gebi ahaanba, ama codsigu wuxuu fashilmay ka hor inta uusan gaarin code-ka CORS-ka (tusaale ahaan 404 ama 500) |
The 'Access-Control-Allow-Origin' header has a value '...' that is not equal to the supplied origin | Server-ku wuxuu oggolaanayaa origin kale oo aan kaaga ahayn |
Response to preflight request doesn't pass access control check | Preflight-ka OPTIONS wuu fashilmay |
...must not be the wildcard '*' when the request's credentials mode is 'include' | Cookies ayaad dirayaa, server-kuna wuxuu kuu soo celiyay * |
Request header field authorization is not allowed | Server-ku ma uu liistaynin header-kaas Access-Control-Allow-Headers gudahiisa |
Kadibna fur tab-ka Network, raadi codsiga fashilmay (iyo OPTIONS kasta oo ka horreeya), oo fiiri status code-kiisa iyo response headers-kiisa.
Marka hore hubi status code-ka. Khaladaadka CORS ee badan waa khalad server oo qaab kale ku jira. Haddii server-ku burburo ama uu soo celiyo 404, jawaabtiisa qalad badanaa ma leh CORS headers, sidaas darteed browser-ku wuxuu sheegaa CORS halkii dhibaatada dhabta ahayd. Hagaaji 500 ama 404, khaladka CORS ayaa laga yaabaa inuu baabbi'o.
Tallaabo 2: Go'aami haddii browser-ka ka wicitaankaan API-gaas toos
Kahor intaadan headers ku darin, weydii: browser-ku ma waa inuu toos u wicitaanaa API-gan?
- API-ga dhinac saddexaad ah ee u baahan furaha qarsoon (OpenAI, Stripe secret key, inta badan adeegyada email) waligood looma wicitaano browser-ka. Furaha waxaa arki doona booqde kasta. Ka wicitaan backend-kaaga, khaladka CORS wuu baabbi'aa, sababtoo ah codsiyada server-ka ilaa server-ka ma ku xirna CORS. Eeg sida loo ilaaliyo furayaasha API.
- API-ga dhinac saddexaad ah aadan maamulin oo aan CORS headers u dirin lama hagaajin karo dhinacaaga. Ka wicitaan backend-kaaga.
- API-gaaga waa la hagaajin karaa adigoo si sax ah u habeynaya. Sii wad hoos.
Tallaabo 3: Hagaaji server-kaaga
Server-ku waa inuu ku daraa headers-ka saxda jawaabihiisa oo dhan, ay ku jiraan jawaabaha khaladka.
Codsiga dhabta ah, dir:
Access-Control-Allow-Origin: https://myapp.com(origin-ka frontend-kaaga oo sax ah, slash ku dambeeya la'aan)Vary: Origin, haddii qiimaha ku xirnaan doono origin-ka weydiiyey
Codsiga preflight ee OPTIONS, ka jawaab status guul ah (200 ama 204) oo leh:
Access-Control-Allow-Origin: https://myapp.comAccess-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETEAccess-Control-Allow-Headers: Content-Type, Authorization(header kasta oo custom ah oo aad dirto)- Ikhtiyaari ah
Access-Control-Max-Age: 600, si browser-ku preflight-ka u kaydiyo muddo
Framework-yada intooda badan waxay leeyihiin package ama dejin samaysa tan. Express-ka, package-ka cors; FastAPI-ga, CORSMiddleware; ASP.NET Core-ka, AddCors; Spring-ka, @CrossOrigin ama habaynta CORS. Dejin Express oo caadi ah:
import cors from "cors";
app.use(cors({
origin: ["https://myapp.com", "http://localhost:5173"],
credentials: true,
}));
Dhig maamulka CORS ka hor routes-kaaga iyo authentication-ka, si codsiyada preflight (oo aan login lahayn) aan loo diidin 401.
AI builder-ka, sharax dejinta si sax ah:
Frontend-ka
https://myapp.comwuxuu wicitaanayaa API-gahttps://api.myapp.comwuxuuna helayaa "Response to preflight request doesn't pass access control check". Dejiso CORS API-ga si uu u oggolaado kaliyahttps://myapp.comiyo preview origin-ka, oggolow GET, POST, PATCH, DELETE oo leh headers-ka Content-Type iyo Authorization, maamul OPTIONS ka hor auth, oo ku dar CORS headers jawaabaha khaladka sidoo kale.
Tallaabo 4: Maamul cookies iyo credentials
Haddii frontend-kaagu cookies (tusaale ahaan, session login) u diro origin kale, labada dhinac waa inay heshiiyaan:
- Frontend-ku dejiyo
credentials: "include"fetch-ka, amawithCredentials: trueaxios-ka. - Server-ku wuxuu diraa
Access-Control-Allow-Credentials: true. Access-Control-Allow-Originee server-ka waa inuu noqdaa origin-ka saxda ah, ma aha*.
Cookies-ka cross-site waxay sidoo kale u baahan yihiin SameSite=None; Secure cookie-ga, browser-yada qaarkood waxay sii xaddidaan cookies-ka dhinac saddexaad. Taasi waa sabab kale oo aad uga doorbidi lahayd habka Tallaabo 5.
Tallaabo 5: Ka fogaad CORS adigoo habeynayo same-origin
Inta badan xalka ugu nadiifka ahi waa in aan codsiyo cross-origin ah samayn. U adeeg API-ga isla origin-ka bogga, tusaale ahaan https://myapp.com/api/...:
- Horumarinta, server-yada horumarinta badankood way proxy-gareyn karaan. Dejinta
server.proxyee Vite waxay/apiu diri kartaa backend-kaaga port kale, sidaas darteed browser-ku mar walba wuxuu la hadlaa hal origin. - Production-ka,
/apiu wareeji backend-ka adigoo isticmaalaya host-kaaga rewrite ama proxy settings, ama u adeeg frontend-ka iyo API-ga server hal ah.
Kadibna frontend-ku wuxuu wicitaanayaa jid relative ah sida fetch("/api/orders"). Ma jiro codsi cross-origin ah, ma jiro preflight cross-origin ah, mana jiro cookie-yo dhib leh. Waxay kaloo ka dhigaysaa inaadan hardcode-gareyn domain API ah oo ka duwan preview iyo production.
Ka beddel frontend-ka inuu wicitaano backend-ka adigoo isticmaalaya jidadka relative ah ee /api halkii URL oo dhan, oo dejiso dev proxy si /api u gudbiyo server-ka API-ga. Kadibna ka saar dejinnada CORS ee aan u baahnayn mar dambe.
Waxa aan la samayn
mode: "no-cors"fetch-ka. Waxba ma dhaafayso; wuxuu code-kaaga siinayaa jawaab madhan oo aan la akhriyi karin.- Browser extensions-ka kuwaas oo damiya CORS. Waxay kaliya beddelaan browser-kaaga. Booqdayaasha oo dhan weli khaladka way arkaan.
- Adeegyada dadweynaha ah ee “CORS proxy” apps dhab ah. Waxay akhriyi karaan oo beddeli karaan wax kasta oo mara, waxayna hoos u dhacaan.
Access-Control-Allow-Origin: *API-ga leh login. Credentials-ka ma shaqeeyo, waana default khaldan xogta gaarka ah.- Dib u celinta
Originheader kasta oo credentials la oggol yahay. Taasi waxay oggolaanaysaa website kasta inuu codsiyo oo login ah u sameeyo magaca isticmaaleyaashaada. Isticmaal allowlist.
Sababaha caadiga ah ee apps-ka AI lagu dhisay
| Xaalad | Xalka |
|---|---|
| Frontend-ku wuxuu wicitaanayaa API dhinac saddexaad ah furaha qarsoon ah | U wareeji wicitaanka backend-ka |
| Preview-ka way shaqeysaa, domain-ka la daabacay wuu fashilmaa | Ku dar origins-ka la daabacay iyo custom domain-ka allowlist-ka, ama isticmaal jidadka relative /api |
| Khalad kaliya POST, PUT ama DELETE | Preflight lama maamulin; ku dar maamulka OPTIONS iyo headers-ka la oggol yahay |
| Khaladku wuxuu soo baxay kadib markii login la daray | Credentials waxay u baahan yihiin origin sax ah iyo Allow-Credentials |
| "CORS error" laakiin Network tab-ku wuxuu muujinayaa 500 | Marka hore hagaaji khaladka server-ka |
URL-ka API ayaa lagu hardcode-gareeyay localhost | Isticmaal jidadka relative ama dejin gaar ah deegaan kasta |
CORS Mythex
Marka mashruuca Mythex uu leeyahay website iyo server API, labaduba waxay ku socdaan adeegyo mashruuc isku mid ah, waxaadna ku beddeli kartaa preview-ka. Waxaad weydiisaa agent-ka inuu frontend-ku wicitaano backend-ka jid relative /api ah, oo development-ka lagu proxy-gareeyo, taasi waxay ka fogaynaysaa inta badan dhibaatooyinka CORS. Haddii aad dhab ahaan u baahan tahay wicitaanno cross-origin ah, siiso agent-ka qaladka saxda ah ee console-ka iyo origins-ka ku lug leh. Hubi natiijada app-ka la daabacay sidoo kale, sababtoo ah cinwaankiisu wuu ka duwan yahay preview-ka. Eeg Multi-service apps iyo API backends docs-ka, iyo hagahayaga debugging app AI lagu dhisay iyo frontend vs backend.
Liiska CORS
- Akhri qaladka oo dhan ee console-ka iyo status code-ka codsiga fashilmay
- Hubi in 404 ama 500 qarsoon aanu jirin
- APIs-ka furayaasha qarsoon ah waxaa laga wicitaanayaa backend-ka, ma aha browser-ka
- Server-ku wuxuu diraa
Access-Control-Allow-Originoo leh origins-ka saxda ah ee la oggol yahay - Preflight-ka
OPTIONSwaa la jawaabay methods iyo headers la oggol yahay, ka hor auth - CORS headers waa ku jiraan jawaabaha khaladka sidoo kale
- Credentials: origin sax ah,
Allow-Credentials: true, dejinta cookie-ga oo saxan - Origins-ka preview, la daabacay iyo custom domain oo dhan waa la daboolay, ama jidadka relative
/apiayaa la isticmaalay - Ma jiro
no-cors, public proxies, ama gaabinta reflect-any-origin
Su'aalaha
Waa maxay macnaha khaladka CORS?
Bogga aad, oo laga soo raray hal origin, wuxuu isku dayay inuu akhriyo jawaab ka timid origin kale, server-kaas jawaabtiisa ma uusan lahayn headers oggolaanaya. Browser-ku wuxuu xannibaa code-kaaga inuu akhriyo jawaabta. Xalku wuxuu ku jiraa server-ka ama habka codsiga loo waddo, ma aha code-ka frontend-ka.
Ma hagaajin karaa khalad CORS frontend-ka?
Si sax ah ma aha. Dejinno sida mode: 'no-cors' waxay kaliya qariyaan jawaabta code-kaaga. Waxaad hagaajisaa server-ka oo u diraya Access-Control-Allow-Origin header sax ah, ama aad API-ga ka wicitaanto backend-kaaga ama proxy same-origin ah.
Access-Control-Allow-Origin: * ma nabad baa?
Waa fiican tahay xogta dadweynaha ah oo qof kasta akhriyi karo, sida API dadweyne oo aan login lahayn. Cookies ama credentials kale lama isticmaali karo, APIs-ka gaarka ahna waa inaad liistaysaa origins-ka saxda ah ee la oggol yahay.
Maxaad uga shaqeysaa Postman ama curl laakiin browser-ka ma shaqeyso?
CORS waxaa fuliya browser-yada oo keliya. Qalabyada sida Postman iyo curl ma adeegsadaan, sidaas darteed codsi ayaa halkaas ku guuleysan karaa oo weli la xannibi karaa markii JavaScript-ka bogga uu sameeyo.
Waa maxay codsiga preflight?
Codsiyada aan fudayn, sida JSON POST ama mid leh header-ka Authorization, browser-ku marka hore wuxuu diraa codsi OPTIONS ah isagoo weydiinaya server-ka waxa methods iyo headers ah ee la oggol yahay. Haddii codsigaas OPTIONS uu fashilmo ama uu ka maqan yahay headers-ka saxda ah, codsiga dhabta ah waligiis lama diro.