Mạng/HTTP

CORS Checker / Explainer

Giải thích từng bước liệu trình duyệt có cho phép một request cross-origin hay không — phân loại simple/preflight, kiểm tra header Access-Control-* của response, tóm tắt.

Credentials (fetch)

Mỗi dòng một cái, "Tên" hoặc "Tên: giá trị" — giá trị không ảnh hưởng đến việc phân loại.

Lấy từ tab Network trong DevTools (header của chính response hoặc preflight OPTIONS) hoặc từ curl -I.

CORS (Cross-Origin Resource Sharing) is a browser mechanism that decides whether JavaScript from one site is allowed to read a response from a server on a different domain. This tool walks through, step by step, whether a specific request will succeed and which Access-Control-* headers it needs.

How to use it

Common uses

Things to keep in mind

CORS protects the user's browser, not the server — the restriction only applies to requests made from page JavaScript in a browser, not to requests from curl, Postman, or server-to-server calls.

Access-Control-Allow-Origin: * is incompatible with credentials: include — for requests carrying cookies or authorization, the server must return a specific origin instead of a wildcard.

Bài viết về công cụ này: CORS: vì sao trình duyệt chặn các request "bình thường" đến một domain khác

Câu hỏi thường gặp

Vì sao một yêu cầu thất bại với lỗi CORS dù máy chủ đã phản hồi thành công?

CORS được trình duyệt thực thi, không phải máy chủ — nếu phản hồi thiếu header Access-Control-Allow-Origin khớp với origin yêu cầu, trình duyệt sẽ chặn JavaScript đọc phản hồi, dù bản thân yêu cầu đã hoàn tất.

Sự khác biệt giữa yêu cầu đơn giản và yêu cầu có preflight là gì?

Yêu cầu đơn giản (GET/POST cơ bản với header chuẩn) đi thẳng qua, còn yêu cầu với header tùy chỉnh, phương thức khác, hoặc một số loại nội dung nhất định sẽ kích hoạt một yêu cầu preflight OPTIONS trước để kiểm tra quyền trước khi gửi yêu cầu thật.

Kiểm tra header CORS ở đây có gửi dữ liệu của tôi tới máy chủ không?

Công cụ kiểm tra các header bạn cung cấp hoặc lấy trực tiếp từ trình duyệt của bạn — không có máy chủ trung gian nào lưu trữ dữ liệu yêu cầu của bạn.

CORS có bảo vệ một API khỏi các yêu cầu độc hại không?

Không. CORS chỉ giới hạn những gì JavaScript trong trình duyệt có thể đọc — kẻ tấn công dùng curl, Postman, hoặc script backend sẽ hoàn toàn bỏ qua nó, nên việc xác thực và ủy quyền thực sự phải được triển khai trên server.

Vì sao Access-Control-Allow-Origin: * không hoạt động cùng với credentials: include?

Đặc tả cấm sự kết hợp này một cách có chủ đích vì lý do bảo mật: cho phép credentials (cookie, header ủy quyền) cùng với một ký tự đại diện chấp nhận bất kỳ origin nào sẽ là lỗ hổng bảo mật nghiêm trọng, nên server phải trả về một origin chính xác khi dùng credentials.

Bài viết: Mạng/HTTP