Same-origin policy (SOP) chặn JavaScript từ một origin (scheme + host + port) đọc response từ origin khác — bảo vệ khỏi việc đọc trộm dữ liệu cross-origin (data theft). Lưu ý: SOP không chặn việc GỬI request cross-site — vì vậy CSRF vẫn tồn tại và cần defense riêng (CSRF token, SameSite cookie).
- CORS — cơ chế để server opt-in cho cross-origin request qua response headers.
- Simple request — GET/POST với Content-Type cơ bản: browser gửi thẳng rồi kiểm tra response header.
- Preflight (OPTIONS) — request có custom header, PUT/DELETE, hoặc
Content-Type: application/json: browser gửi OPTIONS trước; request thật chỉ được gửi sau khi server trả về allowed methods/headers. - Response headers —
Access-Control-Allow-Origin(origin cụ thể, hoặc*— không dùng được với credentials);Allow-Methods,Allow-Headers;Max-Agecache preflight;Allow-Credentials: trueđể gửi cookie — bắt buộc origin cụ thể. - Lỗi thường gặp — nginx và app cùng set CORS header → duplicate → browser reject; dùng
*nhưng cần credentials; quên handle OPTIONS → 405. - Giới hạn — CORS chỉ ràng buộc browser; curl/Postman/server-to-server không bị ảnh hưởng.