Khi request mang cookie cross-origin, trình duyệt siết quy tắc chặt hơn bình thường. Server phải trả đủ hai header:
Access-Control-Allow-Origin: https://app.example.com— phải là origin cụ thể, dùng*sẽ bị chặn.Access-Control-Allow-Credentials: true.
Nếu là preflight, response OPTIONS cũng phải lặp lại hai header trên, và Access-Control-Allow-Headers cũng *không được dùng ** khi có credentials.
js
await fetch('https://api.example.com/me', {
credentials: 'include', // send cookies cross-origin
})Phía cookie cũng phải hợp lệ: SameSite=None; Secure, nếu không trình duyệt sẽ không đính kèm dù CORS đã đúng — đây là nguyên nhân phổ biến nhất của lỗi "chạy local ổn, lên staging mất session".
Lưu ý thêm: mặc định JS chỉ đọc được vài response header cơ bản. Muốn đọc header tự định nghĩa (vd X-Total-Count) phải khai Access-Control-Expose-Headers.