CORS là gì? Hướng dẫn bật CORS trên Hosting cPanel
Thịnh Văn Hạnh
19/05/2026
2402 Lượt xem
Chia sẻ bài viết
Khi website tải font, hình ảnh, file JavaScript hoặc gọi API từ một domain khác, trình duyệt có thể chặn request và hiển thị lỗi “blocked by CORS policy”. Đây là lỗi khá phổ biến khi quản trị website, cấu hình hosting, dùng CDN hoặc phát triển ứng dụng web.
Vậy CORS là gì, vì sao trình duyệt lại chặn request giữa các domain khác nhau và khi nào cần bật CORS trên hosting cPanel? Trong bài viết này, bạn sẽ được giải thích rõ cơ chế hoạt động của CORS, nguyên nhân gây lỗi CORS và cách bật CORS bằng file .htaccess hoặc PHP một cách dễ hiểu, an toàn và phù hợp cho website thực tế.

Tóm Tắt Bài Viết
CORS là gì?
CORS là gì là câu hỏi thường gặp khi website hoặc ứng dụng web bị lỗi trong quá trình tải tài nguyên từ một domain khác. CORS là viết tắt của Cross-Origin Resource Sharing, có nghĩa là chia sẻ tài nguyên giữa các origin khác nhau.
Hiểu đơn giản, CORS là một cơ chế bảo mật của trình duyệt. Cơ chế này cho phép server quyết định website nào được phép truy cập tài nguyên của mình thông qua trình duyệt.
Ví dụ, website A muốn tải dữ liệu, hình ảnh, font chữ hoặc API từ website B. Khi đó, trình duyệt sẽ kiểm tra xem website B có cho phép website A truy cập hay không. Nếu server không cho phép, trình duyệt sẽ chặn request và báo lỗi CORS.
Nói cách khác, khi tìm hiểu CORS là gì, bạn cần hiểu rằng CORS không phải là một phần mềm hay công cụ riêng biệt. Đây là một cơ chế kiểm soát truy cập tài nguyên giữa các website khác origin.
Block by CORS policy là gì?

Blocked by CORS Policy là lỗi xuất hiện khi trình duyệt chặn một request được gửi từ website hiện tại sang một website, API hoặc server khác. Lỗi này xảy ra khi server đích chưa cho phép website của bạn truy cập tài nguyên thông qua cơ chế CORS.
Nói dễ hiểu, website của bạn giống như đang “xin quyền” lấy dữ liệu từ một nơi khác. Nếu server đích không trả lời rằng “được phép”, trình duyệt sẽ chặn request và hiển thị lỗi Blocked by CORS Policy.
Thông báo lỗi thường có dạng:
Access to fetch at ‘https://api.example.com’ from origin ‘https://example.com’ has been blocked by CORS policy
Thông báo này có nghĩa là website https://example.com đang cố gọi dữ liệu từ https://api.example.com. Tuy nhiên, server API chưa cho phép domain https://example.com truy cập, nên trình duyệt đã chặn request.
Lỗi Blocked by CORS Policy thường gặp trong các trường hợp sau:
- Website tải font, ảnh, CSS hoặc JavaScript từ domain khác.
- Website gọi API từ subdomain khác, ví dụ www.example.com gọi api.example.com.
- Frontend chạy ở localhost:3000, còn backend chạy ở localhost:8000.
- Website dùng CDN nhưng CDN chưa bật CORS.
- Một domain phụ cần lấy file từ domain chính.
- Request có gửi token, cookie hoặc header Authorization, nhưng server chưa cấu hình CORS đúng.
Điểm quan trọng cần nhớ là lỗi này thường hiển thị ở frontend, nhưng nguyên nhân phần lớn nằm ở server, hosting, API hoặc CDN. Vì vậy, việc sửa code JavaScript, React, Vue hay Angular không phải lúc nào cũng giải quyết được lỗi.
Để xử lý lỗi Blocked by CORS Policy, bạn cần kiểm tra server đích có trả về các header CORS phù hợp hay chưa, đặc biệt là:
- Access-Control-Allow-Origin
- Access-Control-Allow-Methods
- Access-Control-Allow-Headers
- Access-Control-Allow-Credentials
Nếu bạn dùng hosting cPanel, có thể bật CORS bằng file .htaccess hoặc cấu hình trong PHP. Nếu dùng backend riêng như Node.js, Laravel hoặc Spring Boot, bạn cần cấu hình CORS trực tiếp trong ứng dụng hoặc web server.
Nguyên nhân phổ biến gây lỗi CORS
Lỗi CORS có thể xuất hiện vì nhiều nguyên nhân khác nhau, nhưng phần lớn đều liên quan đến việc server chưa cấp quyền truy cập đúng cho website đang gửi request. Khi trình duyệt phát hiện request đi từ một origin khác, nó sẽ kiểm tra các header CORS trong phản hồi từ server. Nếu header bị thiếu, sai hoặc không khớp với origin hiện tại, trình duyệt sẽ chặn request và báo lỗi CORS.
| Nguyên nhân | Giải thích chi tiết | Cách xử lý gợi ý |
| Thiếu header CORS | Server không trả về header Access-Control-Allow-Origin, nên trình duyệt không biết website hiện tại có được phép truy cập tài nguyên hay không. Đây là nguyên nhân thường gặp nhất khi gọi API hoặc tải file từ domain khác. | Cấu hình CORS trong file .htaccess, PHP, backend hoặc web server để server trả về header phù hợp. |
| Origin không được cho phép | Website gửi request không nằm trong danh sách origin được server cho phép. Ví dụ, server chỉ cho phép https://example.com, nhưng request lại đến từ https://www.example.com. | Whitelist đúng domain cần truy cập. Nên kiểm tra kỹ cả protocol, subdomain và port. |
| Khác protocol | Một bên dùng http, bên còn lại dùng https. Dù cùng domain, trình duyệt vẫn xem đây là hai origin khác nhau vì protocol không giống nhau. | Đồng bộ giao thức về HTTPS hoặc cấu hình chính xác origin được phép truy cập. |
| Khác port | Frontend và backend chạy trên hai port khác nhau, chẳng hạn localhost:3000 gọi API từ localhost:8000. Trình duyệt sẽ xem đây là cross-origin request. | Cho phép đúng port trong môi trường phát triển. Khi đưa lên production, nên cấu hình domain/subdomain rõ ràng. |
| CDN chưa bật CORS | Website tải font, ảnh, CSS hoặc JavaScript từ CDN nhưng CDN chưa trả về header CORS phù hợp. Điều này có thể khiến tài nguyên vẫn mở được trực tiếp nhưng bị chặn khi nhúng vào website. | Cấu hình CORS trên CDN, hosting hoặc server chứa file tĩnh. Kiểm tra response header của file cần tải. |
| Dùng credentials sai cách | Request có gửi cookie, token hoặc header Authorization, nhưng server cấu hình CORS chưa đúng. Một lỗi phổ biến là dùng Access-Control-Allow-Origin: * trong khi request có credentials. | Không dùng * khi gửi credentials. Hãy chỉ định origin cụ thể và cấu hình thêm Access-Control-Allow-Credentials nếu cần. |
| Thiếu header cho preflight request | Với request dùng POST, PUT, DELETE hoặc custom header, trình duyệt có thể gửi request OPTIONS trước. Nếu server không phản hồi đúng, request chính sẽ bị chặn. | Cấu hình server xử lý phương thức OPTIONS và thêm các header như Access-Control-Allow-Methods, Access-Control-Allow-Headers. |
| Sai cấu hình trên hosting | Một số hosting chưa bật module cần thiết hoặc file .htaccess đặt sai thư mục. Vì vậy, dù đã thêm code bật CORS, header vẫn không xuất hiện trong response. | Kiểm tra lại vị trí file .htaccess, module mod_headers, cache hosting và cấu hình server. |
| Cache CDN hoặc cache trình duyệt | Server đã được cấu hình CORS nhưng CDN hoặc trình duyệt vẫn trả về response cũ chưa có header mới. Điều này khiến lỗi CORS tiếp tục xuất hiện sau khi đã sửa. | Xóa cache trình duyệt, purge cache CDN và kiểm tra lại bằng tab Network hoặc lệnh curl. |
Hướng dẫn bật CORS trên hosting cPanel
Bước 1. Kích hoạt trong file .htaccess
Bạn thêm các dòng code dưới đây vào trong file .htaccess
<IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" </IfModule>
Bước 2. Nếu sử dụng mã nguồn PHP bạn có thể sử dụng như sau
<?php header("Access-Control-Allow-Headers: Authorization, Content-Type"); header("Access-Control-Allow-Origin: *"); header('content-type: application/json; charset=utf-8'); ?>

Như vậy bài viết đã hướng dẫn bạn cách để bật CORS trên hosting cPanel giúp cho website dễ dàng hơn trong việc trao đổi thông tin, tăng khả năng tương tác với các dịch vụ Internet.
Các lỗi thường gặp khi bật CORS trên cPanel
Trong quá trình bật CORS trên hosting cPanel, không phải lúc nào chỉ cần thêm một đoạn code vào file .htaccess là lỗi sẽ được xử lý ngay. Một số website vẫn tiếp tục báo lỗi CORS do thiếu header, sai cú pháp, cache chưa cập nhật hoặc request cần thêm phương thức và header khác.
| Lỗi thường gặp | Nguyên nhân có thể | Cách xử lý |
| Không thấy header CORS | Hosting chưa bật module mod_headers, file .htaccess đặt sai thư mục hoặc đoạn cấu hình chưa được Apache đọc. Trong một số trường hợp, bạn đã thêm code đúng nhưng kiểm tra sai URL hoặc file đang được cache. | Kiểm tra lại module mod_headers, vị trí file .htaccess và thư mục chứa website. Sau đó mở tab Network trong trình duyệt để xem phần Response Headers có Access-Control-Allow-Origin hay chưa. |
| Website lỗi 500 sau khi thêm code | File .htaccess bị sai cú pháp, thiếu thẻ đóng, gõ sai lệnh Header set hoặc hosting không hỗ trợ một số directive. Lỗi này khiến Apache không đọc được cấu hình và trả về Internal Server Error. | Khôi phục file .htaccess từ bản backup. Sau đó thêm lại từng đoạn code ngắn, kiểm tra cú pháp cẩn thận trước khi lưu. |
| CORS vẫn lỗi dù đã thêm header | Website đã có Access-Control-Allow-Origin, nhưng request thực tế cần thêm method hoặc header khác. Điều này hay xảy ra khi frontend gửi request POST, PUT, DELETE hoặc có custom header. | Bổ sung thêm Access-Control-Allow-Methods và Access-Control-Allow-Headers. Nếu có preflight request, cần đảm bảo server phản hồi đúng với phương thức OPTIONS. |
| Lỗi khi gửi token | Request có gửi token qua header Authorization, nhưng server chưa cho phép header này trong cấu hình CORS. Vì vậy, trình duyệt chặn request trước khi dữ liệu được gửi đến API. | Thêm Authorization vào Access-Control-Allow-Headers. Có thể cấu hình như: Header set Access-Control-Allow-Headers “Authorization, Content-Type”. |
| Lỗi với cookie hoặc phiên đăng nhập | Request có gửi cookie hoặc thông tin xác thực, nhưng server lại dùng Access-Control-Allow-Origin: *. Khi request có credentials, trình duyệt không chấp nhận wildcard * cho origin. | Không dùng * trong trường hợp có cookie hoặc credentials. Hãy chỉ định domain cụ thể và cấu hình thêm Access-Control-Allow-Credentials: true nếu cần. |
| Postman chạy nhưng browser lỗi | Postman là công cụ kiểm thử API độc lập, không bị ràng buộc bởi Same-Origin Policy như trình duyệt. Vì vậy, API có thể chạy trong Postman nhưng vẫn bị chặn khi gọi từ website. | Kiểm tra trực tiếp trong trình duyệt bằng DevTools. Mở tab Network, chọn request bị lỗi và xem response header từ server. |
| Lỗi do cache CDN hoặc cache trình duyệt | Bạn đã cấu hình CORS trên cPanel nhưng CDN, plugin cache hoặc trình duyệt vẫn trả về response cũ chưa có header mới. | Xóa cache trình duyệt, purge cache CDN và tắt tạm plugin cache nếu cần. Sau đó kiểm tra lại bằng tab Network hoặc lệnh curl. |
| Cấu hình đúng nhưng sai domain | Server chỉ cho phép một origin cụ thể, nhưng website thực tế lại chạy ở domain khác, có hoặc không có www, hoặc khác giao thức HTTP/HTTPS. | Kiểm tra chính xác origin đang gửi request. https://example.com và https://www.example.com là hai origin khác nhau. |
| Lỗi do request preflight OPTIONS | Trình duyệt gửi request OPTIONS trước request chính, nhưng server không phản hồi đúng. Lỗi này hay gặp với API có token, JSON body hoặc custom header. | Cấu hình server cho phép phương thức OPTIONS và khai báo đầy đủ Access-Control-Allow-Methods, Access-Control-Allow-Headers. |
Những lưu ý bảo mật khi bật CORS
Bật CORS giúp website dễ dàng tải tài nguyên từ domain khác, nhưng nếu cấu hình quá rộng, dữ liệu có thể bị truy cập ngoài ý muốn. Vì vậy, bạn nên bật CORS đúng nhu cầu, không nên mở quyền cho tất cả trường hợp.
- Không dùng Access-Control-Allow-Origin: * cho API có dữ liệu người dùng.
- Không bật CORS rộng cho trang quản trị, dashboard hoặc hệ thống nội bộ.
- Chỉ cho phép những domain thật sự cần truy cập.
- Cẩn thận với request có cookie, token hoặc header Authorization.
- Không xem CORS là lớp bảo mật duy nhất cho API.
- Luôn kết hợp CORS với đăng nhập, phân quyền và kiểm tra token.
Nếu chỉ chia sẻ file công khai như ảnh, CSS, JavaScript hoặc font, bạn có thể dùng * trong một số trường hợp. Nhưng với dữ liệu tài khoản, đơn hàng, khách hàng hoặc trang quản trị, nên cấu hình domain cụ thể để an toàn hơn.
Để làm mọi thứ một cách hiệu quả đòi hỏi bạn luôn phải cập nhật các thao tác và phần mềm thường xuyên. Hy vọng với các hướng dẫn về phần mềm CORS trên đây, bạn sẽ biết cách để ứng dụng làm mọi thứ tốt hơn trong quá trình quản trị website. Đừng quên truy cập website bkns.vn và facebook để biết thêm những thông tin hữu ích khác nữa nhé.



































