我被困在这几个小时没有运气,所以我想我会在这里问。
我有一堆端点服务,其中大多数端点接受GET
和POST
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,并尝试了一些不同的东西,所有这些都没有奏效。我(我想)我至少明白,当我使用GET
和POST
以外的http方法时,浏览器会发送一个预先发出的OPTIONS
请求作为http方法。< / p>
处理此问题的最佳方法是什么?有没有办法禁用这个预先发出的请求?我在我的客户端应用程序中指定调用此端点的http方法是DELETE
。我应该在我调用此端点的AJAX函数中添加指定标题的东西(我使用的是直接的JavaScript)吗?
如果我无法找到解决方法,我只是想改变我的端点以使用GET
或POST
方法,但我想找到一种方法来处理这个问题。在我采取简单的方法之前问题。
答案 0 :(得分:1)
我(我想)我至少明白,当我使用
GET
和POST
以外的http方法时,浏览器会发送一个OPTIONS
的预先发出的请求作为http方法。
是
有没有办法禁用此预先广告的请求?
不,没有。它由浏览器自动启动,无法从JS中禁用它。只要您在JS中发送DELETE
请求跨域,浏览器就会进行预检。
我应该在调用此端点的AJAX函数中添加指定标题的内容吗?
鉴于“ No&#39; Access-Control-Allow-Origin&#39;标题出现在您收到的请求资源“消息上,您在客户端代码中所做的任何更改都不会产生任何影响。
需要发送更多标头来处理此问题的地方是服务器端。
如果我无法找到解决方法,我只是想改变我的端点以使用
GET
或POST
方法
您可能想尝试先尝试一下。看来,即使你做出改变,你仍然会得到“ No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上“。
SO问题"No 'Access-Control-Allow-Origin' header is present on the requested resource"是一个阅读此问题的好地方,可以更好地了解正在发生的事情。