Safari CORS

Khanh Nam DoKhanh Nam Do
2 min read

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 :D

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 :(

0
Subscribe to my newsletter

Read articles from Khanh Nam Do directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Khanh Nam Do
Khanh Nam Do

Khanh is a full stack web developer with over 15 years of experience developing for the web