
Giải mã Cookies và CORS: Khi nào trình duyệt thực sự gửi thông tin xác thực?
Hiểu rõ cơ chế hoạt động của Cookies trong môi trường CORS là bài toán sống còn để bảo mật ứng dụng web. Bài viết phân tích sâu về các yêu cầu kỹ thuật, cấu hình server và những cạm bẫy khiến việc gửi credentials thất bại.
Bài viết được dịch và tổng hợp từ tin tức gốc. Bạn có thể đọc bài viết gốc bằng tiếng Anh tại đây.
Điểm tin nhanh:
- Việc gửi Cookies trong yêu cầu Cross-Origin đòi hỏi thuộc tính credentials: "include" từ phía client.
- Server bắt buộc phải cấu hình Access-Control-Allow-Credentials: true để chấp nhận xác thực.
- Không được phép sử dụng wildcard (*) cho Access-Control-Allow-Origin khi làm việc với credentials.
Bạn đã bao giờ rơi vào tình huống dở khóc dở cười khi API endpoint của mình hoạt động hoàn hảo trên Postman nhưng lại từ chối nhận Cookies từ trình duyệt chưa? Đây không phải là lỗi ngẫu nhiên, mà là rào cản bảo mật nghiêm ngặt của cơ chế CORS (Cross-Origin Resource Sharing). Việc nắm vững cách thức trình duyệt xử lý thông tin xác thực là kỹ năng bắt buộc để tránh các sự cố bảo mật không đáng có, tương tự như việc hiểu rõ cách tối ưu hóa quy trình gỡ lỗi Unit Test với AI để đảm bảo chất lượng mã nguồn.
Cơ chế hoạt động của Credentials trong CORS
Trong kiến trúc web hiện đại, trình duyệt mặc định sẽ không gửi Cookies, HTTP Authentication hay Client-side SSL certificates cho các yêu cầu cross-origin. Để thay đổi hành vi này, lập trình viên cần chủ động cấu hình.

Yêu cầu từ phía Client
Khi thực hiện một request bằng Fetch API hoặc XMLHttpRequest, bạn phải thiết lập thuộc tính credentials là include. Nếu không có cấu hình này, trình duyệt sẽ coi yêu cầu là ẩn danh và loại bỏ mọi thông tin xác thực.
Mẹo hay: Việc cấu hình sai credentials là nguyên nhân hàng đầu dẫn đến lỗi 401 Unauthorized dù người dùng đã đăng nhập. Hãy kiểm tra kỹ cấu hình trong các giải pháp thay thế ModHeader hiện đại để theo dõi header thực tế đang được gửi đi.
Yêu cầu từ phía Server
Chỉ gửi credentials từ client là chưa đủ. Server phải phản hồi lại bằng các header cụ thể để xác nhận rằng nó cho phép nhận các thông tin này.
| Header | Giá trị bắt buộc | Ghi chú |
|---|---|---|
| Access-Control-Allow-Credentials | true | Bắt buộc để nhận Cookies |
| Access-Control-Allow-Origin | [Origin cụ thể] | Không được dùng wildcard (*) |

Những cạm bẫy kỹ thuật cần lưu ý
Một trong những sai lầm phổ biến nhất là cố gắng sử dụng wildcard (*) cho Access-Control-Allow-Origin khi credentials được bật. Trình duyệt sẽ chặn ngay lập tức vì lý do bảo mật. Bạn phải chỉ định chính xác domain của client.
Ngoài ra, cần phân biệt rõ giữa việc server từ chối request và việc trình duyệt chặn response. Có những trường hợp:
- Trình duyệt gửi request.
- Server xử lý thành công và trả về response hợp lệ.
- Trình duyệt chặn JavaScript đọc response đó vì chính sách CORS không thỏa mãn.
Điều này thường xảy ra khi bạn đang xây dựng các hệ thống phức tạp, ví dụ như xây dựng Bot giao dịch Polymarket, nơi việc quản lý phiên làm việc qua Cookies là cực kỳ quan trọng.
Đánh giá & Lời khuyên Thực tiễn
Việc sử dụng Cookies trong CORS là một con dao hai lưỡi.
- Ưu điểm: Cho phép duy trì trạng thái đăng nhập xuyên suốt các domain con hoặc dịch vụ khác nhau.
- Nhược điểm: Tăng rủi ro bị tấn công CSRF (Cross-Site Request Forgery) nếu không cấu hình thuộc tính SameSite cho Cookie một cách cẩn thận.
- Phạm vi ứng dụng: Chỉ nên sử dụng trong các hệ thống nội bộ hoặc các dịch vụ tin cậy lẫn nhau. Đối với các API công cộng, hãy ưu tiên sử dụng Bearer Token (JWT) thay vì Cookies.
Lưu ý: Luôn kiểm tra cấu hình SameSite của Cookie (Lax, Strict, hoặc None) vì nó ảnh hưởng trực tiếp đến việc Cookie có được gửi trong các yêu cầu cross-site hay không.
Câu hỏi thường gặp (FAQ)
Tại sao tôi đã đặt credentials: include nhưng vẫn bị lỗi CORS?
Có thể server của bạn chưa trả về header Access-Control-Allow-Credentials: true hoặc bạn đang dùng wildcard (*) cho Origin.
Có cách nào dùng wildcard cho Origin khi gửi Cookies không?
Không. Trình duyệt yêu cầu Origin phải được định nghĩa cụ thể để ngăn chặn việc rò rỉ thông tin xác thực cho các trang web độc hại.
Làm thế nào để kiểm tra header đang được gửi đi?
Bạn có thể sử dụng Network Tab trong Chrome DevTools hoặc các công cụ như InterceptX để quan sát chi tiết từng header của request và response.
Kết luận
Việc hiểu rõ cơ chế Cookies và CORS không chỉ giúp bạn giải quyết các lỗi kỹ thuật khó chịu mà còn giúp xây dựng các hệ thống web an toàn và bền vững hơn. Hãy luôn kiểm tra kỹ cấu hình phía server và client để đảm bảo luồng dữ liệu thông suốt. Nếu bạn thấy bài viết này hữu ích, đừng quên theo dõi hi_dev để cập nhật những kiến thức chuyên sâu về phát triển phần mềm và tối ưu hóa hệ thống.
Do you like this post?
Upvote to push this post higher on the community feed





