CORS là cơ chế trình duyệt bảo vệ user — server phải opt-in mới cho phép request cross-origin.
Trình duyệt tự gửi request OPTIONS trước nếu là preflighted request (method ngoài GET/POST/HEAD, hoặc header không đơn giản như Content-Type: application/json); simple request (GET với header đơn giản) thì không cần preflight.
js
app.use(cors({
origin: ['https://app.example.com'],
methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true,
}))credentials: truebắt buộc khi gửi cookie hoặc headerAuthorization. Khi bật cờ này,originKHÔNG được để*— phải liệt kê tường minh.- Đặt
cors()TRƯỚC routes để OPTIONS preflight được xử lý. - Debug: xem header
Access-Control-Allow-Origintrong tab Network của DevTools;credentials: truemà server trả*thì trình duyệt chặn.
Lưu ý: CORS do trình duyệt thực thi — Postman hay curl không bị chặn, nên đừng coi nó là lớp bảo mật phía server.