Trình kiểm tra CORS
Kiểm tra và gỡ lỗi các chính sách và yêu cầu API Chia sẻ tài nguyên giữa các nguồn gốc (CORS)
CORS là gì? CORS (Chia sẻ tài nguyên giữa các nguồn gốc) là một cơ chế cho phép các trình duyệt web thực hiện các yêu cầu giữa các nguồn gốc (tên miền, giao thức hoặc cổng khác nhau) từ các tập lệnh chạy trong trình duyệt.
Tiêu đề CORS chính
Access-Control-Allow-Origin
: Chỉ định nguồn gốc nào được phép truy cập tài nguyênAccess-Control-Allow-Methods
: Chỉ định phương thức HTTP nào được phépAccess-Control-Allow-Headers
: Chỉ định tiêu đề HTTP nào có thể được sử dụngAccess-Control-Allow-Credentials
: Chỉ định có bao gồm thông tin xác thực (cookie, xác thực HTTP) hay không
💡 Giải pháp CORS
Giải pháp phía máy chủ
1. Express.js (Node.js):
const cors = require('cors'); app.use(cors({ origin: 'https://example.com', methods: ['GET', 'POST'], credentials: true }));
2. Spring Boot (Java):
@CrossOrigin(origins = "https://example.com") @RestController public class ApiController { ... }
Giải pháp phía máy khách
1. Sử dụng máy chủ proxy:
// package.json (React) "proxy": "http://localhost:3001"
2. JSONP (chỉ GET):
// Giải pháp hạn chế nhưng đơn giản fetch('api?callback=handleResponse')
🔧 Cấu hình CORS theo môi trường
Next.js
// next.config.js module.exports = { async headers() { return [ { source: '/api/:path*', headers: [ { key: 'Access-Control-Allow-Origin', value: '*' } ] } ] } }
Nginx
location /api { add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; add_header Access-Control-Allow-Headers "Content-Type, Authorization"; }
Apache
# .htaccess Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS" Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
Cấu hình CORS theo môi trường
Kịch bản kiểm tra
- • Yêu cầu đơn giản: Kiểm tra hành vi CORS cơ bản với các yêu cầu GET
- • Yêu cầu kiểm tra trước: Kiểm tra các yêu cầu kiểm tra trước với các phương thức PUT/DELETE
- • Tiêu đề tùy chỉnh: Kiểm tra các yêu cầu có tiêu đề Authorization
- • Thông tin xác thực: Kiểm tra các yêu cầu có cookie
- • Xử lý lỗi: Kiểm tra các kịch bản lỗi
Cân nhắc về bảo mật
- • Hãy thận trọng với việc sử dụng ký tự đại diện (*) do rủi ro bảo mật
- • Nguyên tắc đặc quyền tối thiểu: Chỉ cho phép các nguồn gốc và phương thức cần thiết
- • Hạn chế thông tin xác thực: Chỉ cho phép các nguồn gốc cụ thể khi bao gồm thông tin xác thực
- • Xem xét thường xuyên: Định kỳ xem xét và cập nhật các chính sách CORS
Mẹo gỡ lỗi CORS
Công cụ dành cho nhà phát triển trình duyệt
- • Kiểm tra các yêu cầu OPTIONS trong tab Mạng
- • Tìm kiếm các thông báo lỗi CORS trong Bảng điều khiển
- • Xác minh các tiêu đề CORS trong Tiêu đề phản hồi
Công cụ hữu ích
- • Trình kiểm tra CORS (công cụ này)
- • Postman (để kiểm tra API)
- • lệnh curl (để kiểm tra máy chủ trực tiếp)