飞行前Http'OPTIONS'方法被发送而不是'DELETE'

时间:2016-12-28 20:27:12

标签: http methods cors http-delete

我被困在这几个小时没有运气,所以我想我会在这里问。

我有一堆端点服务,其中大多数端点接受GETPOST http方法。在这种情况下,我的服务只是在响应标头中指定Access-Control-Allow-Origin*,如果我的某个应用位于不同的域/端口并且想要使用该服务。

我有一个端点使用DELETE http方法,我似乎无法让它工作。当我从客户端应用程序调用此端点时,我在控制台中收到此消息:

Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.

过去几个小时我一直在读CORS,并尝试了一些不同的东西,所有这些都没有奏效。我(我想)我至少明白,当我使用GETPOST以外的http方法时,浏览器会发送一个预先发出的OPTIONS请求作为http方法。< / p>

处理此问题的最佳方法是什么?有没有办法禁用这个预先发出的请求?我在我的客户端应用程序中指定调用此端点的http方法是DELETE。我应该在我调用此端点的AJAX函数中添加指定标题的东西(我使用的是直接的JavaScript)吗?

如果我无法找到解决方法,我只是想改变我的端点以使用GETPOST方法,但我想找到一种方法来处理这个问题。在我采取简单的方法之前问题。

1 个答案:

答案 0 :(得分:1)

  

我(我想)我至少明白,当我使用GETPOST以外的http方法时,浏览器会发送一个OPTIONS的预先发出的请求作为http方法。

  

有没有办法禁用此预先广告的请求?

不,没有。它由浏览器自动启动,无法从JS中禁用它。只要您在JS中发送DELETE请求跨域,浏览器就会进行预检。

  

我应该在调用此端点的AJAX函数中添加指定标题的内容吗?

鉴于“ No&#39; Access-Control-Allow-Origin&#39;标题出现在您收到的请求资源“消息上,您在客户端代码中所做的任何更改都不会产生任何影响。

需要发送更多标头来处理此问题的地方是服务器端。

  

如果我无法找到解决方法,我只是想改变我的端点以使用GETPOST方法

您可能想尝试先尝试一下。看来,即使你做出改变,你仍然会得到“ No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上“。

SO问题"No 'Access-Control-Allow-Origin' header is present on the requested resource"是一个阅读此问题的好地方,可以更好地了解正在发生的事情。