Cross-Origin Resource Sharing (CORS) ã¯ãç°ãªããã¡ã€ã³éã§ã®å®å šãªéä¿¡ãšããŒã¿äº€æãå¯èœã«ãããææ°ã® Web éçºã«ãããåºæ¬çãªã»ãã¥ãªã㣠ã¡ã«ããºã ã§ããããã¯ãç¹ã«åæ£ã·ã¹ãã ãã¯ã©ãŠãããŒã¹ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã³ã³ããã¹ãã«ãããŠãWeb ã¢ããªã±ãŒã·ã§ã³ãé©åã«æ©èœããããã«äžå¯æ¬ ãªã³ã³ããŒãã³ãã§ãã CORS ã䜿çšãããšããããã¡ã€ã³ (ãªãªãžã³) ã§å®è¡ãããŠãã Web ã¢ããªã±ãŒã·ã§ã³ããWeb ãã©ãŠã¶ãŒã«çµã¿èŸŒãŸããŠãã Same-Origin Policy (SOP) ã«éåããããšãªããå¥ã®ãã¡ã€ã³ãããã©ã³ããç»åãã¹ã¯ãªãããAPI ããŒã¿ãªã©ã®ãªãœãŒã¹ãèŠæ±ã§ããŸãã SOP ã¯ãWeb ããŒãžãç°ãªãçºè¡å ã®ãªãœãŒã¹ãšå¯Ÿè©±ããããšãå¶éããã¯ãã¹ãµã€ã ãªã¯ãšã¹ã ãã©ãŒãžã§ãª (XSRF) ãã¯ãã¹ãµã€ã ã¹ã¯ãªããã£ã³ã° (XSS) æ»æãªã©ã®æœåšçãªã»ãã¥ãªãã£è匱æ§ãããŠãŒã¶ãŒãä¿è·ããã»ãã¥ãªãã£æ©èœã§ãã
CORS ãæå¹ãªç°å¢ã§ã¯ãã¯ã©ã€ã¢ã³ã (Web ãã©ãŠã¶ãŒ) ãšãµãŒã㌠(ãªãœãŒã¹ ãããã€ããŒ) ã®äž¡æ¹ãããŽã·ãšãŒã·ã§ã³ ããã»ã¹ã«åå ããŠããªãªãžã³éã®ãªãœãŒã¹å ±æãèš±å¯ããããã©ãããæ±ºå®ããŸãã CORS ãããã³ã«ãšããŠç¥ããããã®ããŽã·ãšãŒã·ã§ã³ ããã»ã¹ã«ã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã® HTTP ããããŒã®äº€æãå«ãŸããŸãã CORS ãããã³ã«ã¯ãããªãã©ã€ã ãªã¯ãšã¹ããšå®éã®ãªã¯ãšã¹ããšãã 2 ã€ã®äž»èŠãªã³ã³ããŒãã³ãã§æ§æãããŸãã
ããªãã©ã€ã ãªã¯ãšã¹ãã¯ãå®éã®ãªã¯ãšã¹ããæåããããã«å¿ èŠãª CORS èšå®ããµãŒããŒããµããŒãããŠãããã©ããã倿ããããã«ãå®éã®ãªã¯ãšã¹ãã®åã«ã¯ã©ã€ã¢ã³ãã«ãã£ãŠéä¿¡ããã HTTP OPTIONS ãªã¯ãšã¹ãã§ãããµãŒããŒã¯ãç¹å®ã® CORS é¢é£ããããŒã§å¿çããã¯ãã¹ãªãªãžã³èŠæ±ããã³è¿œå ã®æ¡ä»¶ãå¶é (èš±å¯ããã HTTP ã¡ãœãããããããŒãªã©) ãåãå ¥ããææãããããšã瀺ããŸããããªãã©ã€ã ãªã¯ãšã¹ããæåãããšãã¯ã©ã€ã¢ã³ãã¯å®éã®ãªã¯ãšã¹ã (HTTP GETãPOSTãPUTãDELETEããŸãã¯ãã®ä»ã®ãµããŒããããŠããã¡ãœãã) ã«é²ã¿ãŸãã
CORS ããµããŒãããã«ã¯ãWeb ãµãŒããŒãšã¢ããªã±ãŒã·ã§ã³ã®å¿çã«é©å㪠CORS é¢é£ã® HTTP ããããŒãå«ããå¿ èŠããããŸãããããã®ããããŒã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
Access-Control-Allow-Origin: ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããããªãªãžã³ (ãã¡ã€ã³) ã瀺ããŸããç¹å®ã®ãã¡ã€ã³ã«èšå®ããããšããã¯ã€ã«ãã«ãŒã (*) ãèšå®ããŠä»»æã®ãã¡ã€ã³ãèš±å¯ããããšãã§ããŸããAccess-Control-Allow-Methods: GETãPOSTãPUTãDELETE ãªã©ãã¯ãã¹ãªãªãžã³ ãªã¯ãšã¹ãã«èš±å¯ããã HTTP ã¡ãœããããªã¹ãããŸããAccess-Control-Allow-Headers: Content-TypeãAuthorization ãªã©ãã¯ãã¹ãªãªãžã³ ãªã¯ãšã¹ãã«èš±å¯ããã HTTP ããããŒãæå®ããŸããAccess-Control-Expose-Headers: ã¯ã©ã€ã¢ã³ãããµãŒããŒã®å¿çã§ã¢ã¯ã»ã¹ã§ããããããŒããªã¹ãããã¯ã©ã€ã¢ã³ãããµãŒããŒããã«ã¹ã¿ã ããããŒãèªã¿åãããšãã§ããããã«ããŸããAccess-Control-Allow-Credentials: Cookie ãŸãã¯ãã®ä»ã®è³æ Œæ å ±ã䜿çšããã¯ãã¹ãªãªãžã³ ãªã¯ãšã¹ããèš±å¯ããããã©ããã瀺ããŸããAccess-Control-Max-Age: ã¯ã©ã€ã¢ã³ããããªãã©ã€ã ãªã¯ãšã¹ãã®çµæããã£ãã·ã¥ã§ããæå€§æé (ç§åäœ) ãæå®ããè€æ°ã®ããªãã©ã€ã ãªã¯ãšã¹ãã®å¿ èŠæ§ãæžãããŸãã
AppMasterã§ã¯ãçæãããããã¯ãšã³ã ã¢ããªã±ãŒã·ã§ã³ã¯ CORS ãµããŒãã䜿çšããŠæ§ç¯ãããŠãããç°ãªããã¡ã€ã³ã§ãã¹ããããŠãã Web ã¢ããªã±ãŒã·ã§ã³ãã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ãšã®ã·ãŒã ã¬ã¹ãªçµ±åãå¯èœã«ãªããŸããããã«ã AppMasterãã©ãããã©ãŒã 㯠CORS èšå®ã管çããããã®äŸ¿å©ãªã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããéçºè ãç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«åãããŠé©å㪠CORS é¢é£ããããŒãç°¡åã«æ§æã§ããããã«ããŸããããã«ãããçæãããã¢ããªã±ãŒã·ã§ã³ã Web ã»ãã¥ãªãã£ã®ãã¹ã ãã©ã¯ãã£ã¹ã«ç¢ºå®ã«æºæ ãããšåæã«ãå±éãä»ã®ãµãŒãã¹ãšã®çµ±åãæè»ã«è¡ãããšãã§ããŸãã
AppMasterã® CORS çµã¿èŸŒã¿ãµããŒãã«å ããŠãWeb éçºè ã¯ããŸããŸãªãªãŒãã³ãœãŒã¹ ã©ã€ãã©ãªãããã«ãŠã§ã¢ ãœãªã¥ãŒã·ã§ã³ã掻çšããŠãã¢ããªã±ãŒã·ã§ã³ã§ CORS ãæå¹ã«ããããšãã§ããŸãã人æ°ã®ããã©ã€ãã©ãªã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- Node.js ããã³ Express ã®
cors - Ruby ããã³ Rack ã¢ããªã±ãŒã·ã§ã³çšã®
rack-cors - Django Web ã¢ããªã±ãŒã·ã§ã³ã®
django-cors-headers - Flask Web ã¢ããªã±ãŒã·ã§ã³çšã®
flask-cors
çµè«ãšããŠãCross-Origin Resource Sharing (CORS) ã¯ãç°ãªããã¡ã€ã³éã§ãªãœãŒã¹ãšããŒã¿ãå®å šã«å ±æã§ããããã«ãããææ°ã® Web éçºã®éèŠãªåŽé¢ã§ããããã¯ãWeb ã¢ããªã±ãŒã·ã§ã³ã®çžäºæ¥ç¶ãããäžçã§å¿ èŠãªã»ãã¥ãªã㣠ã¬ãã«ãç¶æããªãããåäžãªãªãžã³ ããªã·ãŒã®å¶éãå æããããã®éèŠãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã AppMasterã®no-codeãã©ãããã©ãŒã 㯠CORS ã¡ã«ããºã ãæ¡çšããWeb ã»ãã¥ãªãã£ã®ãã¹ã ãã©ã¯ãã£ã¹ã«æºæ ããããã¯ãšã³ããWebãããã³ã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ãçæããŸãããã®ããã«ããŠã AppMasteréçºè ãäŒæ¥ããããŸã§ãããè¿ éãã€ã³ã¹ãå¹çããã¹ã±ãŒã©ãã«ã§å®å šãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããã«ããŸãã