Chuyển đến nội dung
Tất cả bài viết
Blog & hướng dẫn/Xử lý lỗi & Bảo mật
Xử lý lỗi & Bảo mật

Lỗi CORS khi dùng Proxy: Vì sao API chạy nhưng trình duyệt bị chặn?

Kiểm tra origin, preflight và credentials để phân biệt chính sách trình duyệt với sự cố đường kết nối proxy.

Lỗi CORS khi dùng Proxy: Vì sao API chạy nhưng trình duyệt bị chặn?
NỘI DUNG BÀI VIẾTHướng dẫn chi tiết từ ProxySmart

Bạn thử API bằng công cụ kiểm thử và nhận dữ liệu bình thường, nhưng giao diện web lại báo lỗi CORS. Đổi proxy hoặc IP chưa chắc giải quyết được, vì hai môi trường không áp dụng cùng một cơ chế truy cập phản hồi.

CORS kiểm soát điều gì?

CORS dùng header để cho trình duyệt biết origin nào được đọc tài nguyên khác origin. Một số yêu cầu cần preflight OPTIONS. Origin gồm giao thức, hostname và cổng, không phải IP thoát của proxy. Xem hướng dẫn MDN.

Đừng chỉ nhìn thông báo trong JavaScript

Mở Console và Network tại lần thử gây lỗi. Xác định yêu cầu OPTIONS có xuất hiện không, mã phản hồi của nó và yêu cầu chính có được gửi hay không. Một trang lỗi 5xx thiếu header CORS cũng có thể tạo thông báo CORS; vì vậy cần đối chiếu nhật ký phía server trước khi kết luận.

Checklist cho hệ thống bạn quản lý

  1. Ghi origin thực tế của frontend, kể cả cổng môi trường thử.
  2. Đối chiếu danh sách origin được phép tại API.
  3. Kiểm tra phương thức và header mà preflight yêu cầu.
  4. Kiểm tra cấu hình gửi credentials và việc cookie có được trình duyệt gửi không.
  5. Đối chiếu các header của phản hồi thành công và phản hồi lỗi.

Với yêu cầu có credentials, không dùng dấu * cho Access-Control-Allow-Origin. Chỉ cho phép origin cần thiết. CORS không thay thế xác thực, phân quyền hoặc bảo vệ CSRF.

Tình huống minh họa

Frontend thử tại một cổng mới, trong khi API chỉ cho phép origin cũ. Công cụ API vẫn chạy vì không chịu cùng kiểm soát của trình duyệt. Đội phát triển nên cập nhật allowlist môi trường thử đã được phê duyệt, thay vì mở cho mọi origin hoặc thêm một proxy công cộng để né lỗi.

Phân biệt với lỗi đường mạng

Nếu không có phản hồi vì DNS, TLS hoặc kết nối thất bại, hãy kiểm tra lớp mạng trước. Nếu server trả phản hồi nhưng trình duyệt không cho mã trang đọc, chuyển sang kiểm tra chính sách origin. Hai vấn đề có thể đồng thời xảy ra; mỗi lần chỉ thay một yếu tố để biết thay đổi nào có tác dụng.

Thông tin nên gửi hỗ trợ

Gửi origin, phương thức, mã lỗi và danh sách tên header, không gửi giá trị token. Che cookie và dữ liệu cá nhân trong ảnh Network. Có thể đối chiếu với bài cấu hình proxy trong Postman để kiểm tra công cụ riêng, nhưng kết quả Postman không xác nhận frontend đã đúng CORS.