节点:允许PUT的CORS

Aks*_*hot 12 javascript node.js cors express

我正在尝试PUT调用我的其余api端点,并收到此错误:

Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
Run Code Online (Sandbox Code Playgroud)

我启用了CORS这个解决方案:enable-cors,它适用于POST.

我如何实现同样的目标PUT

谢谢.

Jul*_*ien 26

添加这个:

res.header('Access-Control-Allow-Methods','PUT,POST,GET,DELETE,OPTIONS');

app.use(function(req, res, next) {
       res.header("Access-Control-Allow-Origin", "*");
       res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
       res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
          next();
    });
Run Code Online (Sandbox Code Playgroud)


jfr*_*d00 10

您需要在服务器上支持OPTIONS方法,因为浏览器将预先传输所有跨源PUT请求,无论您拥有什么标头.而且,您需要确保在CORS标头中明确允许PUT.从MDN的CORS页面上看到这个:

此外,对于可能对服务器数据产生副作用的HTTP请求方法(特别是对于GET以外的HTTP方法,或对某些MIME类型的POST使用),规范要求浏览器"预检"请求,请求支持的方法从具有HTTP OPTIONS请求方法的服务器,然后,在服务器"批准"时,使用实际的HTTP请求方法发送实际请求.服务器还可以通知客户端是否应随请求一起发送"凭据"(包括Cookie和HTTP身份验证数据).

因此,在您的服务器中,您需要执行以下操作:

app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
    // allow preflight
    if (req.method === 'OPTIONS') {
        res.send(200);
    } else {
        next();
    }
});
Run Code Online (Sandbox Code Playgroud)

这是一篇关于这个主题的文章:

Express.JS中的跨源请求