æçµæŽæ°:
CORSã®ä»çµã¿ â ãã©ãŠã¶ã¯å¥ã®ãªãªãžã³ã®å¿çãã©ãæ±ãã®ã
CORSã¯ãå¥ã®ãªãªãžã³ããååŸããå¿çããããŒãžã®JavaScriptã«èªãŸããŠãããããã©ãŠã¶ã確ãããä»çµã¿ã ããã ãããªã¯ãšã¹ããéããããµãŒããŒã§åŠçãæžãã§ããå¿çãèªããã«ãšã©ãŒã«ãªãå Žåããããã ããCORSãšã©ãŒãªããµãŒããŒã«ã¯äœãå±ããŠããªãããšã¯éããªããã
ãã®ããªãªãžã³ãã¯ãURLãšåãæå³ïŒ
ãŠã§ãã§ã¯ã¹ããŒã ã»ãã¹ãã»ããŒãã®çµã¿åããã ããhttps://app.example.comãšhttps://api.example.comã¯ãã¹ããéãã®ã§å¥ãªãªãžã³ãåããã¹ãã§ãhttpãšhttpsã¯å¥ã ããäžæ¹ããã¹ã/articleãã/profileã«å€ããã ããªãåããªãªãžã³ã ããçç¥ãããããŒãã¯httpsãªãéåžž443ãšããŠæ¯ã¹ããã ã
ã©ãããŠå¿çãèªç±ã«èªãŸããªãã®ïŒ
æªæã®ããããŒãžãããå¥ã®ãµãŒãã¹ã®éå
¬éæ
å ±ãèªãŸããªãããã«ããããã ããåäžãªãªãžã³ããªã·ãŒã«ããå¶éãããµãŒããŒã®èš±å¯ã«å¿ããŠç·©ããã®ãCORSãªãã ãAPIãAccess-Control-Allow-Originã§èš±å¯ãããªãªãžã³ãè¿ããšããã©ãŠã¶ãç
§åãããããã¯APIã䜿ãäººã®æ¬äººç¢ºèªãæš©éãã§ãã¯ãšã¯å¥ã®ä»çµã¿ã ãã
æ¯åãéã£ãŠããå¿çãèªããã確ãããã®ïŒ
æ¬çªã®èŠæ±ãéãåã«ãOPTIONSã§èš±å¯ã確èªãããããªãã©ã€ãããå¿
èŠãªå Žåãããããããšãã°JSONãéãPOSTãAuthorizationããããŒãä»ããèŠæ±ãªã©ã ãããã©ãŠã¶ã¯äœ¿ãã¡ãœãããããããŒãç¥ããããµãŒããŒã®èš±å¯ã確ãããŠããæ¬çªã®èŠæ±ãéãã倱æãããæ¬çªã¯éããªãããæåããŠãæ¬çªã®å¿çã«å¯ŸããCORSã®ç¢ºèªã¯å¿
èŠã ãã
GETãªãäºå確èªã¯äžèŠããšããèŠãæ¹ã§ããïŒ
ã¡ãœããã ãã§ã¯æ±ºãŸããªãããGETã»HEADã»POSTã§ããä»ããããããŒãContent-Typeãªã©ã®æ¡ä»¶ãé¢ä¿ãããã ãæ¡ä»¶ãæºããã°ããªãã©ã€ããªãã§éãããã©ãå¿çã®èªã¿åãã«ã¯èš±å¯ãå¿
èŠã ããäºå確èªã®çµæããã£ãã·ã¥ãããŠããŠãOPTIONSãçç¥ãããããšããããã ã
ãã°ã€ã³äžã®Cookieãéã£ãŠãçµæãèªã¿ãããšãã¯ïŒ
fetchã§ã¯credentialsãincludeã«ãããµãŒããŒã¯å
·äœçãªèš±å¯ãªãªãžã³ãšAccess-Control-Allow-Credentials: trueãè¿ãå¿
èŠããããããã®å ŽåãAllow-Originã®ã*ãã§ã¯å¿çãèªããªããã ãããã«Cookieã®SameSiteãªã©ã®å±æ§ãããã©ãŠã¶ã®ç¬¬äžè
Cookieå¶éã«ãåŸãã®ã§ãCORSãèš±å¯ããã°å¿
ãCookieãå±ãããã§ã¯ãªããã
ãšã©ãŒãçŽããããŠãå
šéšã*ãã«ããããªãâŠ
ãŸãéçºè
ããŒã«ã®Networkã§ãOPTIONSã倱æããŠããã®ããæ¬çªã®å¿çãèªããªãã®ããåããããããªãã©ã€ãã¯200ã ãã§ãªã204ãªã©ã®æåã¹ããŒã¿ã¹ã§ãããããã©ãå¿
èŠãªèš±å¯ããããŒãããã£ãŠããããšã倧åãèš±å¯ãããªãªãžã³ã¯çšéã«åãããåãåã£ãOriginãç¡æ¡ä»¶ã§åå°ããªãã§ãã
CORSãæ£ããèšå®ããã°ãäžæ£ãªæäœãé²ããïŒ
ããã ãã§ã¯äžååã ããããªãã©ã€ããªãã§éããèŠæ±ãããã®ã§ãCSRFã«ã¯å¥ã®å¯Ÿçãå¿
èŠããµãŒããŒå士ã®éä¿¡ãcurlã«ã¯ããã©ãŠã¶ã®CORSã«ããèªã¿åãå¶éãé©çšãããªããã ãAPIåŽã®èªèšŒã»èªå¯ã¯å¿
ãå¥ã«èšèšããããCORSã¯ããã©ãŠã¶ã®ããŒãžã«ã©ã®å¿çãèªãŸãããããšèŠãããšãæ
åœç¯å²ãåãããã
ãšã©ãŒã調ã¹ãé åº
- ããŒãžåŽãšAPIåŽã®ã¹ããŒã ã»ãã¹ãã»ããŒããæ¯ã¹ãã
- Networkã§OPTIONSãšæ¬çªãªã¯ãšã¹ããåããã¹ããŒã¿ã¹ãšå¿çããããŒãèŠããOPTIONSããªãããšã ãã§ç°åžžãšã¯å€æããªãã
- ããªãã©ã€ãã§ã¯ãèš±å¯ãªãªãžã³ã»ã¡ãœããã»èŠæ±ããããŒãç §åãããæ¬çªã®å¿çã«ãèš±å¯ãªãªãžã³ãå¿ èŠã
- Cookieä»ãã®å Žåã¯ãå ·äœçãªèš±å¯ãªãªãžã³ãAllow-CredentialsãCookie屿§ããã©ãŠã¶ã®å¶éã確èªããã
- 401ã»403ã»500ãªã©ã®å¿çããªãã€ã¬ã¯ãã確èªãããCORS衚瀺ã®èåŸã«èªèšŒå€±æããµãŒããŒé害ãé ããå Žåãããã
mode: "no-cors"ã¯ãèªç±ã«JSONãèªããããã«ããèšå®ã§ã¯ãããŸãããã¯ãã¹ãªãªãžã³ã®å¿çãopaqueã«ãªããJavaScriptããæ¬æãªã©ãèªããªãããã§ãããã©ãŠã¶ã®ä¿è·æ©èœãç¡å¹ã«ããã®ã§ã¯ãªãã管çããAPIã®èš±å¯èšå®ãçŽããŸãã
次ã«èªãïŒOAuthã®èªå¯ã®ä»çµã¿ãšãã©ãŠã¶ã®éä¿¡ãšæç»ã
åèè³æ
ç¢ºèªæ¥ïŒ2026幎9æ21æ¥ã
- MDN â Cross-Origin Resource Sharing (CORS) â å¿çå ±æãããªãã©ã€ãã®æ¡ä»¶ãè³æ Œæ å ±ä»ããªã¯ãšã¹ããCookieããªã·ãŒã®å¶çŽã
- WHATWG Fetch Standard â CORS protocol â CORSããããŒã®æå³ãããªãã©ã€ããšæåã¹ããŒã¿ã¹ãå®éã®å¿çã®æ€æ»ã
èšæ£å±¥æŽ
- 2026-09-21ïŒéä¿¡å¶éãšå¿çèªã¿åãå¶éã®æ··åãããªãã©ã€ãã®æ¡ä»¶ãCookieãšæåã¹ããŒã¿ã¹ã®èª¬æãä¿®æ£ã