我们正在后台运行Tornado服务,该服务接受来自React应用程序的发布和删除调用。
我们的 axios.post调用工作正常,但在我们的删除请求中失败,并显示以下错误消息
405(不允许使用方法)
对预检请求的响应未通过访问控制检查:所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:3000”。
export const StopBuild = (action$) =>
action$.ofType(STOPBUILD)
.mergeMap((action) => {
return Observable.fromPromise(axios.delete(action.stopRequest))
.map(response => PlatformBuildSuccess(response))
.catch(error => Observable.of(PlatformBuildFailure(error, action.platform)))
})
在服务器端,这是我们当前设置的
self.set_header("Content-Type", "*")
self.set_header("Access-Control-Allow-Origin", "*")
self.set_header("Access-Control-Allow-Headers", "*")
self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE')
我们注意到,在服务器端,我们仅设置以下标头POST调用仍然有效。我认为我们在服务器端出了问题。
self.set_header("Access-Control-Allow-Origin", "*")
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以做的是,在您的API请求中允许使用cors: 像这样:
axios.delete(url, { crossdomain: true }) // an example
您可以以此为例,并在您的删除请求中添加crossdomain:true
。
让我知道cors错误是否仍然存在。
答案 1 :(得分:0)
这是CORS问题。如错误所指示,DELETE
操作尚未被允许。 Here的解释是,您必须将DELETE
方法添加到预检请求的Access-Control-Allow-Methods
响应标头中。
在服务器端,使用nodejs,允许CORS看起来像这样:
const corsMiddleware = (req, res, next) => {
res.header('Access-Control-Allow-Origin', '*')
res.header('Access-Control-Allow-Headers', '*')
res.header('Access-Control-Allow-Methods', 'OPTIONS, POST, DELETE')
next()
}
app.use(corsMiddleware)
可以从具有所有标头的所有来源发出请求,并且允许使用OPTIONS
,POST
和DELETE
方法。
答案 2 :(得分:0)
对于taken
请求,有一个名为CORS
的软件包。您可以通过将其安装为
cors
然后您就可以要求它并将其用作示例的中间件
npm install cors --save
有关cors npm软件包here
的更多信息