It's me ;-)

Safari CORS

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 🙁

Leave a Reply

Your email address will not be published. Required fields are marked *