magento 2 REST API 调用期间出现 400 错误请求

400 Bad Request during magento 2 REST API Call

在 angular 中使用 $http.get 时,我遇到了一个问题:Cross-Origin 请求被阻止:同源策略不允许读取远程资源.....

$http({ 
  method: 'GET', 
  url: 'https://<magento_host>/rest/default/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=status&searchCriteria[filter_groups][0][filters][0][value]=processing,pending&searchCriteria[filter_groups][0][filters][0][condition_type]=in',
    headers : {
      'Authorization': 'Bearer xxxxxxxxxxxxxxx'
    }
   }).success(function (data) {

    }).error(function (data) {

    });

为了避免跨源问题,我在 Apache 服务器的 .htaccess 文件中设置了以下方法。

  1. Header 总是设置 Access-Control-Allow-Origin "*"
  2. Header 总是设置 Access-Control-Allow-Methods "POST, GET, OPTIONS, 放置、删除
  3. Header 始终设置 Access-Control-Allow-Headers: 授权

在 firefox 开发者工具中我是这样的

  1. Cross-Origin 请求被阻止:同源策略不允许
    https:///rest/default/V1/orders?searchCriteria[filter_groups][0][filters][0][field]=status&searchCriteria[filter_groups][ 读取远程资源0][filters][0][value]=processing,pending&searchCriteria[filter_groups][0][filters][0][condition_type]=in. (原因:CORS预检通道没有成功)。

当我尝试使用此 rest 客户端调试器工具时

Note : we try to find the solution but we failed. Please help...

我使用下面的代码来获得解决方案。

将选项请求更改为 200 ok

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

<IfModule mod_headers.c>
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Headers "Authorization"
</IfModule>

最后激活header并重启apache

sudo a2enmod headers

sudo service apache2 restart