- CORS (Cross-Origin Resource Sharing)
- Cơ chế bảo mật trình duyệt do W3C quy định, cho phép máy chủ khai báo nguồn gốc nào có quyền truy cập tài nguyên nào, bằng cách thêm một tập hợp tiêu đề phản hồi bắt đầu bằng Access-Control- ở cấp độ giao thức HTTP
- Same-Origin Policy (Chính sách cùng nguồn gốc)
- Một trong những cơ chế bảo mật cốt lõi của trình duyệt, mặc định cấm JavaScript gửi yêu cầu HTTP đến máy chủ khác nguồn gốc để ngăn trang độc hại đọc dữ liệu nhạy cảm từ trang web khác
- Yêu cầu Preflight (Preflight Request)
- Trước khi gửi yêu cầu xuyên miền có thể ảnh hưởng đến dữ liệu máy chủ, trình duyệt sẽ gửi trước một yêu cầu OPTIONS để hỏi máy chủ, máy chủ phải phản hồi với tiêu đề CORS chính xác thì trình duyệt mới gửi yêu cầu thực
- Simple Request (Yêu cầu đơn giản)
- Yêu cầu đáp ứng tất cả điều kiện: phương thức là GET/HEAD/POST, Content-Type chỉ là text/plain/multipart/form-data/application/x-www-form-urlencoded, không có tiêu đề yêu cầu tùy chỉnh, sẽ được gửi trực tiếp không cần gửi OPTIONS preflight
- Access-Control-Allow-Origin (ACAO)
- Tiêu đề CORS quan trọng nhất, chỉ định nguồn gốc được phép truy cập tài nguyên, giá trị có thể là * hoặc nguồn gốc cụ thể, khi gửi thông tin xác thực không được dùng *
- Access-Control-Allow-Methods (ACAM)
- Tiêu đề phản hồi preflight, chỉ định tất cả các phương thức HTTP mà máy chủ hỗ trợ, phân cách bằng dấu phẩy, phải khai báo tất cả các phương thức được sử dụng
- Access-Control-Allow-Headers (ACAH)
- Tiêu đề phản hồi preflight, chỉ định tất cả các tiêu đề yêu cầu được phép, khi yêu cầu có tiêu đề tùy chỉnh phải khai báo ở đây
- Access-Control-Allow-Credentials (ACAC)
- Chỉ định có cho phép gửi thông tin xác thực trong yêu cầu xuyên miền hay không, giá trị phải là true viết thường
- Access-Control-Max-Age (ACMA)
- Chỉ định thời gian kết quả preflight có thể được lưu đệm (đơn vị giây), giảm yêu cầu OPTIONS lặp lại không cần thiết
- Vary: Origin
- Tiêu đề phản hồi báo cho CDN/reverse proxy biết tiêu đề Origin ảnh hưởng đến nội dung phản hồi, bắt buộc phải có khi trả về Allow-Origin động
- CORS-safelisted request headers (Tiêu đề yêu cầu được CORS chấp thuận)
- Các tiêu đề cơ bản CORS cho phép mặc định không cần khai báo trong Allow-Headers, bao gồm Accept, Accept-Language, Content-Language, Content-Type (chỉ một số loại nhất định)
- Forbidden header name (Tên tiêu đề bị cấm)
- Các tiêu đề trình duyệt cấm JavaScript tự đặt như Host, Connection, Cookie, Origin v.v. do trình duyệt tự kiểm soát
- Credentialed Request (Yêu cầu gửi thông tin xác thực)
- Yêu cầu xuyên miền gửi thông tin xác thực danh tính như withCredentials=true hoặc credentials: 'include', sẽ mang theo Cookie và tiêu đề Authorization
- Access-Control-Expose-Headers
- Chỉ định các tiêu đề phản hồi được phép JavaScript đọc, ngoài các tiêu đề cơ bản được tiết lộ mặc định
- Phương thức OPTIONS
- Phương thức HTTP dùng để hỏi khả năng của máy chủ, trong CORS trình duyệt dùng phương thức này tự động gửi preflight request
- Tiêu đề Origin
- Tiêu đề yêu cầu do trình duyệt tự động thêm, chỉ định nguồn gốc của trang web gửi yêu cầu, máy chủ dùng giá trị này để quyết định cho phép hay không
- Thuộc tính crossorigin
- Thuộc tính HTML chỉ định cách xử lý yêu cầu xuyên miền khi tải tài nguyên, bắt buộc khi sử dụng Canvas xử lý hình ảnh xuyên miền
- Chế độ yêu cầu no-cors
- Chế độ đặc biệt của API fetch, chỉ có thể gửi simple request và JavaScript không thể đọc phản hồi (opaque response)