我们有一个API(由我们团队的后端开发人员制作),我正在尝试在Vue应用程序中使用。以前,我已经通过axios
HTTP client向API提出了一些GET
请求,因此,由于框架本身,我预计不会出现任何问题。我正在尝试以下方法:
const data = JSON.stringify(someObject);
axios.post(process.env.VUE_APP_DEV_API_ENDPOINT + `/examination/conclusion`, data)
返回的得到415不支持的媒体类型响应。好的,请求标头包含
Accept: application/json, text/plain, */*
Content-Type: application/x-www-form-urlencoded
大摇大摆显示该POST
API
很合理,我尝试将请求更改为
axios.post(process.env.VUE_APP_DEV_API_ENDPOINT + `/examination/conclusion`, data, {
headers: {
'Content-Type': 'application/json-patch+json',
},
})
但是,这使我在(Vivaldi)开发人员工具中的“(失败)”代替了HTTP请求代码和“(失败)net :: ERR_FAILED”。.好的,Chrome开发者工具表明axios实际上发送了{{1 }},而不是OPTIONS
!这是为什么? (不过,Vivaldi控制台说是POST
请求失败了)。该请求是跨域的(从本地主机到远程服务器),而这个请求(与不带头设置发送的请求不同)也会在控制台中导致此错误:
从原点“ http://localhost:8081”开始对“ [我的API路径] /检查/结论”处的XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:没有HTTP正常状态。
如果这是一个CORS问题,为什么我得到415,而没有这些标题并且没有CORS投诉?是吗? 我该如何解决?为什么axios发送POST
而不是OPTIONS
的请求?还是没有,那是Chrome开发人员工具的怪癖?这太不一致了,不知道从哪里继续。
我找到了similar question,但是没有收到答案。
PS
好,在FireFox中,第二个请求也显示为发送一个POST
请求,该请求随后得到404响应,并且控制台显示CORSPreflightDidNotSucceed和CORSDidNotSucceed错误。我问过我们的后端开发人员,他们认为整个应用程序都启用了CORS,所以看来这很可能是axios的问题。
hm,看起来axios不必对此做任何事情。
OPTIONS
给出相同的415响应,
fetch(process.env.VUE_APP_DEV_API_ENDPOINT + `/examination/conclusion`, {
method: 'POST',
body: data
})
给出相同的fetch(process.env.VUE_APP_DEV_API_ENDPOINT + `/examination/conclusion`, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: data
})
结果
看起来像this回答了大多数“为什么”的问题。问题,而不是“如何解决?”一个
this似乎与“如何解决?”有关方面(我已将其显示给我们的后端开发人员,我们将看看是否有帮助)