Fix lỗi API Response to preflight request doesn’t pass access control check: It does not have HTTP ok status apache Magento 2

 

Lỗi này mình sửa áp dụng cho magento 2 nha.

Bình thường gọi hay bị lỗi Response to preflight request doesn’t pass access control check: It does not have HTTP ok status apache , để sửa ta làm như sau:

Mình sử dụng docker, còn bạn cài thì cũng làm theo như bình thường:

Mở file vhost của magento lên (gõ apachectl -S sẽ ra ngay thư mục vhost, nếu dùng docker bạn phải mount nó nha.):

Paste thêm đoạn này vào:

<IfModule mod_headers.c>

Header always set Access-Control-Max-Age “86400”

Header always set Access-Control-Allow-Headers “https://example.localhost&#8221;

Header always set Access-Control-Allow-Methods “POST, GET, OPTIONS, DELETE, PUT, PATCH”

Header always append Access-Control-Allow-Origin: “https://example.localhost&#8221;

</IfModule>

 

Trong đó https://example.localhost chính là domain backend magento.

Của mình nó nằm ở đường dẫn:

/opt/bitnami/apache/conf/vhosts/magento-vhost.conf

Tiếp theo trong file .htaccess bạn thêm đoạn này vào chỗ <IfModule mod_headers.c>, bên trong thẻ này nha.

Đoạn này do .htaccess của mình nó redirect sang thằng /opt/bitnami/apache/conf/vhosts/htaccess/magento-htaccess.conf nên thêm vào file .conf ở đường dẫn này.

 

Rồi paste đoạn sau vào:

Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT, PATCH"
Header always set Access-Control-Max-Age "86400"
Header always set Access-Control-Allow-Headers "*"

RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

Okie, lưu lại.

Đoạn này sẽ fix được lỗi Access-Control-Allow-Origin: *

Xong, giờ thêm một đoạn code ngắn trong file index.php
Mở rồi thêm trên cùng của file index.php nha:

 

header(‘Content-Type: application/json’);

$method = $_SERVER[‘REQUEST_METHOD’];

if ($method == “OPTIONS”) {

header(‘Access-Control-Allow-Origin: *’);

header(“Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method,Access-Control-Request-Headers, Authorization”);

header(“HTTP/1.1 200 OK”);

die();

}


Sau đó gõ apachectl restart để restart lại apache.

Okie, giờ đã vào được API trên magento 2 rồi nha. (Lỗi này hay gặp ở method PUT và DELETE)

Chúc bạn thành công.