【问题标题】:Pre-Flight Http 'OPTIONS' Method being sent instead of 'DELETE'发送飞行前 Http 'OPTIONS' 方法而不是 'DELETE'
【发布时间】:2016-12-29 10:24:45
【问题描述】:

我已经坚持了几个小时没有运气,所以我想我会在这里问。

我有一个带有一堆端点的服务,其中大部分都接受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 方法的预发送请求。

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

如果我无法解决这个问题,我将更改我的端点以使用 GET 或 POST 方法,但我想在我采取之前找到一种方法来处理这个问题简单的出路。

【问题讨论】:

  • 你解决了吗?您是否按照答案中的说明在服务器端添加了标头?

标签: http methods cors http-delete


【解决方案1】:

我(我想我)至少明白,当我使用GET 和POST 以外的http 方法时,浏览器会发送带有OPTIONS 作为http 方法的预发送请求。

是的

有没有办法禁用这个预先发送的请求?

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

我是否应该在调用此端点的 AJAX 函数中指定标头?

鉴于您收到的“请求的资源上不存在 'Access-Control-Allow-Origin' 标头”消息,您在客户端代码中所做的任何更改都不会产生任何影响。

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

如果我无法解决这个问题,我将更改我的端点以使用 GET 或 POST 方法

您可能想先尝试一下。似乎即使您进行了更改,您仍然会得到“请求的资源上不存在 'Access-Control-Allow-Origin' 标头”。

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

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 1970-01-01
    • 2019-03-31
    • 2019-06-03
    • 1970-01-01
    • 2013-05-14
    • 2019-01-18
    • 2018-06-18
    • 2015-07-27
    相关资源
    最近更新 更多