Kuelewa Sera ya Cross-Origin Resource Sharing (CORS)
Cross-Origin Resource Sharing (CORS) ni utaratibu wa kiusalama unaotekelezwa na vivinjari vya wavuti ili kudhibiti jinsi msimbo wa JavaScript unaoendeshwa kwenye tovuti moja unavyoweza kusoma rasilimali kutoka tovuti nyingine. Kivinjari kinapofanya ombi la cross-origin, kinatuma kichwa cha Origin kikionyesha kikoa ambacho ombi hilo limeanzia. Seva inayopokea ombi lazima ijibu kwa kutumia vichwa maalum vya HTTP ili kuruhusu au kuzuia ufikiaji huo.
Kikagua CORS kinakusaidia kuchanganua ikiwa kivinjari kitaruhusu ombi maalum kulingana na vichwa vya jibu la HTTP unavyobandika na maelezo ya ombi unayoweka. Chombo hiki kinasaidia watengenezaji wa mifumo ya mbele (front-end), watengenezaji wa mifumo ya nyuma (back-end), watengenezaji wa majukwaa ya API, na watengenezaji wa uendeshaji (operations) wanaohitaji kujua ikiwa msimbo wa kivinjari unaweza kusoma jibu fulani, au ikiwa jibu la OPTIONS linaruhusu method na vichwa vilivyoombwa.
Jinsi ya Kuweka Maelezo ya Ombi na Jibu
Ili kutumia Kikagua CORS, unahitaji kuingiza maelezo yafuatayo kwenye kiolesura:
- Jibu la kukagua: Chagua kati ya "Jibu halisi" au "Jibu la preflight".
- Vichwa vya jibu la HTTP: Bandika vichwa vya jibu la HTTP kwenye kisanduku cha maandishi. Kiwango cha juu cha urefu wa maandishi haya ni herufi 200,000. Unapokagua jibu la preflight, hakikisha umejumuisha na mstari wa hali ya HTTP (status line).
- Origin ya ombi: Weka scheme, host, na port ya hiari ya kikoa unachotaka kukagua (kwa mfano,
https://app.example.com). Sehemu hii lazima iwe origin safi aunull, bila njia ya URL (path), maswali (query), au vitambulisho vya siri. - Method iliyoombwa: Weka jina la HTTP method inayotumiwa na ombi lako.
- Majina ya vichwa yaliyoombwa: Weka majina ya vichwa kutoka
Access-Control-Request-Headers, ukitenganisha kwa koma au kwa kuandika kwenye mistari mipya (kwa mfano,Content-Type, Authorization). - Jumuisha vitambulisho: Washa swichi hii ikiwa ombi lako linajumuisha vidakuzi au uthibitishaji wa HTTP.
Kikagua CORS hufanya uchambuzi huu ndani ya kivinjari chako pekee. Vichwa na maelezo ya ombi hubaki kwenye kivinjari chako. Hakuna kinachopakiwa au kuhifadhiwa na BroBroGo.
Sheria za Uchambuzi na Hitilafu za Kuingiza Data
Wakati wa kuingiza data, Kikagua CORS kinathibitisha usahihi wa muundo wa vichwa na maelezo ya ombi. Ikiwa kuna makosa, chombo kitaonyesha ujumbe wa hitilafu:
- Ikiwa utajaribu kukagua bila kubandika vichwa, utaona ujumbe: "Bandika vichwa vya jibu la HTTP kabla ya kukagua."
- Ikiwa maandishi yaliyobandikwa yanazidi kikomo cha herufi 200,000, utaona: "Jibu hili ni kubwa kupita kawaida. Liweke chini ya herufi
‹max›." - Mstari usio na muundo sahihi wa kichwa cha HTTP au mstari wa hali utazalisha hitilafu: "Mstari wa
‹line›si kichwa halali cha HTTP wala mstari halali wa hali." - Jina la kichwa lisilo sahihi litasababisha ujumbe: "Mstari wa
‹line›una jina batili la kichwa cha HTTP." - Origin isiyo sahihi itasababisha hitilafu: "Weka Origin yenye scheme, host na port ya hiari pekee, kama https://app.example.com."
- Method isiyo sahihi itasababisha: "Weka token halali ya HTTP method."
- Ikiwa utaweka method ambayo vivinjari haviwezi kuitumia kwenye maombi ya fetch, utaona: "Vivinjari haviruhusu method ya
‹method›kwenye maombi ya fetch." - Kichwa cha ombi kisicho halali kitasababisha: "“
‹header›” si jina halali la kichwa cha ombi la HTTP."
Ikiwa kuna masuala ya jumla ya uingizaji wa data, mfumo utaonyesha ujumbe: "Rekebisha sehemu iliyoangaziwa kisha ujaribu tena."
Uamuzi wa Kivinjari na Sababu za Kichujio
Baada ya kubonyeza kitufe cha "Kagua CORS", chombo kitatoa uamuzi wa kivinjari ambao unaweza kuwa mmoja wa zifuatazo:
- "Limeruhusiwa na jibu la CORS lililobandikwa."
- "Limezuiwa na jibu la CORS lililobandikwa."
- "Vichwa vinakubalika, lakini hali ya preflight haijulikani."
- "Weka jibu na maelezo ya ombi, kisha ukague sera ya CORS." (Wakati hakuna data iliyoingizwa).
- "Bandika jibu ili ukague sera yake ya CORS." (Hali ya awali kabla ya kuanza).
Chombo pia kinaonyesha sehemu za Access-Control-* zilizochanganuliwa na kutoa sababu maalum za uamuzi huo:
Uchambuzi wa Origin
- "Access-Control-Allow-Origin inalingana kabisa na
‹origin›." - "Access-Control-Allow-Origin inaruhusu Origin yoyote kwa ombi hili."
- "Access-Control-Allow-Origin haipo."
- "Access-Control-Allow-Origin haiwezi kuwa * wakati vitambulisho vinajumuishwa."
- "Access-Control-Allow-Origin ni
‹actual›, si‹expected›." - "Access-Control-Allow-Origin ina thamani batili:
‹value›." (Hii hutokea ikiwa kichwa kina thamani nyingi au kimetenganishwa kwa koma).
Uchambuzi wa Vitambulisho (Credentials)
- "Access-Control-Allow-Credentials ni true kikamilifu."
- "Ombi lenye vitambulisho linahitaji Access-Control-Allow-Credentials: true."
- "Vitambulisho havijajumuishwa, kwa hiyo Access-Control-Allow-Credentials haiathiri uamuzi huu."
Uchambuzi wa Hali ya Preflight (Preflight Status)
- "Hali ya preflight
‹status›imefaulu." - "Hali ya preflight
‹status›si hali ya 2xx iliyofaulu." - "Hakuna mstari wa hali ya HTTP uliobandikwa, kwa hiyo hali ya lazima ya 2xx ya preflight haiwezi kukaguliwa."
Uchambuzi wa Method
- "preflight inaruhusu
‹method›." - "
‹method›ni method iliyo kwenye orodha salama ya CORS na si lazima ionekane katika Access-Control-Allow-Methods." - "Access-Control-Allow-Methods hairuhusu
‹method›."
Uchambuzi wa Vichwa vya Ombi (Request Headers)
- "Hakuna majina ya vichwa yaliyoombwa yanayohitaji idhini ya preflight."
- "preflight inaruhusu majina ya vichwa yaliyoombwa:
‹headers›." - "Access-Control-Allow-Headers: * inajumuisha majina haya kwa ombi lisilo na vitambulisho:
‹headers›." - "Access-Control-Allow-Headers hairuhusu:
‹headers›." - "Authorization lazima itajwe wazi; Access-Control-Allow-Headers: * haiijumuishi."
Sheria Maalum na Mipaka ya Uchambuzi
Wakati wa kutathmini sera ya CORS, kuna sheria muhimu za kiufundi na kesi maalum ambazo Kikagua CORS inazingatia:
- Athari za Vitambulisho: Wakati vitambulisho (cookies au HTTP authentication) vinajumuishwa kwenye ombi, kichwa cha
Access-Control-Allow-Originhakiwezi kutumia alama ya nyota (*). Aidha, alama za nyota (*) kwenye vichwa vyaAccess-Control-Allow-MethodsnaAccess-Control-Allow-Headerszinapoteza maana yake ya wildcard na hazitakubaliwa kama idhini ya jumla. - Kichwa cha Authorization: Kichwa cha
Authorizationkina upekee wake. Hata kama seva inarudishaAccess-Control-Allow-Headers: *, kichwa chaAuthorizationlazima kitajwe wazi kwa jina lake kwenye orodha ya vichwa vilivyoruhusiwa ili kivinjari kikubali. - Hali ya Preflight: Ikiwa unakagua jibu la preflight lakini hukubandika mstari wa hali ya HTTP (kama vile
HTTP/1.1 200 OK), chombo hakitaweza kuthibitisha ikiwa jibu lina hali ya mafanikio ya 2xx, na matokeo yatakuwa "indeterminate".
Kikagua CORS kinachambua tu vichwa vya jibu na maelezo ya ombi uliyobandika. Chombo hiki hakiwasiliani na seva, hakisomi URL, hakiseti vidakuzi, hakikagui DNS/TLS, wala hakibadilishi usanidi wa seva yako. Matokeo yanayoruhusu yanamaanisha tu kuwa data uliyobandika inakidhi vigezo vya CORS; haidhamini kuwa ombi halisi litafanya kazi kwenye kivinjari kwani mambo mengine kama vile uelekezaji upya (redirects), majibu yaliyohifadhiwa kwenye akiba (cached responses), mabadiliko ya sheria za seva, viendelezi vya kivinjari, au jibu halisi baada ya preflight yanaweza kuathiri ombi.
Maswali Yanayoulizwa Mara kwa Mara (FAQ)
Nibandike jibu halisi au jibu la preflight?
Tumia Jibu halisi kuangalia ikiwa msimbo wa kivinjari unaweza kusoma jibu moja. Tumia jibu la preflight kwa jibu la OPTIONS linaloidhinisha method ya baadaye na majina ya vichwa vilivyoombwa.
Kwa nini alama ya * inaweza kukataliwa wakati vitambulisho vinatumika?
Vidakuzi au uthibitishaji wa HTTP unapotumika, Origin iliyoruhusiwa lazima ilingane kabisa na Origin ya ombi. Alama ya * kwenye method na vichwa vinavyoruhusiwa pia hupoteza maana yake ya kujumuisha kila kitu.
Je, matokeo yanayoruhusu yanathibitisha kuwa ombi halisi litafanya kazi?
La. Matokeo haya yanahusu jibu lililobandikwa na maelezo ya ombi yaliyoingizwa hapa pekee. Uelekezaji upya, majibu ya akiba, mabadiliko ya kanuni za seva, viendelezi vya kivinjari na jibu halisi baada ya preflight bado vinaweza kubadilisha matokeo.