Mặc dù vấn đề CORS gặp rất nhiều rồi nhưng hôm rồi lại dính =))
Bình thường chỉ cần set dòng sau vào http.conf (hoặc .htaccess/vhost) là CORS sẽ được enable:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "*"
Header set Access-Control-Allow-Methods "*"
Mà lần này cũng khá chủ quan khi chỉ test bằng Chrome & chả có vấn đề gì. Đến lúc demo thì owner lại test bằng Safari và nó báo phũ phàng là request is blocked by CORS policy 🙁
Check lại bằng Firefox cũng vẫn ok, nên đoán nhiều khả năng là Safari nó đang ở strict mode thôi. Vào Develop menu thì thấy có 1 option là: Disable Cross-Origin Restrictions. Nhưng cái này chỉ hoạt động ở trình duyệt của người dùng, làm sao fix kiểu đó được 🙁
Vẫn theo hướng là thằng Safari nó bắt quá chặt chẽ thôi nên có thể nó không cho chơi wildcard (không nhớ lắm ở đâu nói là chuẩn bây giờ phải phệt cụ thể từng header/method các kiểu trong value của mấy cái Access-Controll-Allow-*) nên mình thay dần thử như sau:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET,POST,PUT,DELETE,OPTIONS"
Header set Access-Control-Allow-Headers "Origin,Authorization,Content-Type,Accept,User-Agent,Cache-Control,Keep-Alive,X-Requested-With,If-Modified-Since"
Định mệnh, Safari đã cho phép gửi request 😀
Thật ra thì chạy production thì vẫn phải nhét từng cái value như ở trên thật, nhưng do vẫn đang chạy staging thôi nên nhiều khi lười, bỏ wildcard cho tiện, có ai ngờ đâu 🙁