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)
这是一篇关于这个主题的文章:
| 归档时间: |
|
| 查看次数: |
11785 次 |
| 最近记录: |