Trình duyệt áp same-origin policy: JS ở origin A mặc định không đọc được response từ origin B (khác scheme/host/port). CORS là cơ chế server cho phép có kiểm soát một số cross-origin request, bằng cách trả các header phản hồi.
Đây là quyết định phía server:
- Access-Control-Allow-Origin: origin được phép. Liệt kê rõ các origin tin cậy; không dùng cho API cần credential/nhạy cảm.
- Access-Control-Allow-Methods / -Headers: method và header được phép.
- Access-Control-Allow-Credentials: true nếu cần gửi cookie — khi đó không được dùng cho origin.
- Preflight: với request "non-simple" (PUT/DELETE, header tùy biến), trình duyệt gửi OPTIONS trước; server phải trả đúng các header trên (kèm Max-Age để cache).
Lưu ý bảo mật: CORS không phải cơ chế xác thực — nó chỉ nới same-origin cho trình duyệt. Đừng phản chiếu (reflect) bừa Origin của request vào Allow-Origin; hãy allow-list.