由于预检响应中的“访问控制 - 允许 - 方法”而无法发送PUT请求

时间:2017-09-12 16:06:17

标签: javascript json nginx request cors

我知道,这是一个非常常见的主题,我已经检查了很多关于stackoverflow的问题。但我的情况有点不同,因为我没有得到问题。基本上,我知道如何处理CORS,我已经尝试了很多解决方案。

让我解释一下情况:

我的设置是一个Ionic项目(在localhost上),它通过http请求将PUT发送到我自己托管的Directus Headless-CMS。 GET和POST工作完美。 当我通过Postman尝试请求时,它运行得很好。我知道Postman会在其请求中自动发送其他标头。我也尝试在我的代码中添加它们,但仍然是相同的响应消息。

这是Ionic中的响应代码段

  var jsonbody = {};
  jsonbody['german'] = "lorem ipsum";
  jsonbody['turoyo'] = "lorem ipsum";
  jsonbody['description'] = "lorem ipsum";
  console.log(jsonbody);

  this.http.put('http://example.com/api/1.1/tables/translation/rows/1?access_token=myaccesstoken', jsonbody, {headers: headers})
    .subscribe(
      (response) => {
        //foo
      },
      (error) => {
        //bar
      },
      () => {
        //foobar
      }
    );

在我的浏览器控制台中,我在尝试请求后收到此消息:

  

XMLHttpRequest无法加载http://example.com/api/1.1/tables/translation/rows/1?access_token=myaccesstoken。在预检响应中,Access-Control-Allow-Methods不允许使用方法PUT。

在邮差中,它的工作就像一件轻而易举的事。看

enter image description here

您也可以在Postman中为该请求生成相应的代码段。在这种情况下,它是:

enter image description here

有人知道我做错了什么吗?也许我只是错过了一个细节。我还尝试将标头添加到启用了nginx站点的配置中。但这并没有什么不同。但这对我来说毫无意义,因为邮差确实发出了请求。

谢谢!

2 个答案:

答案 0 :(得分:1)

您是否已将CORS设置添加到/[directus]/api/.htaccess文件中?

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"

答案 1 :(得分:0)

最后我尝试了这个解决方案并且有效:

https://michielkalkman.com/snippets/nginx-cors-open-configuration/

我只是将CORS语句放入我的位置规则中。

无论如何对我来说非常奇怪,这与我提到的工具一起工作。