如何在POST请求上调试net :: err_failed / 415不支持的媒体类型错误?

时间:2019-09-19 10:47:13

标签: javascript ajax http

我们有一个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

possible content types: application/json, application/json-patch+json, application/*+json, text/json

很合理,我尝试将请求更改为

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

  1. 好,在FireFox中,第二个请求也显示为发送一个POST请求,该请求随后得到404响应,并且控制台显示CORSPreflightDidNotSucceedCORSDidNotSucceed错误。我问过我们的后端开发人员,他们认为整个应用程序都启用了CORS,所以看来这很可能是axios的问题。

  2. 一些可能与axios相关的问题:23452083

  3. 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 }) 结果

  4. 看起来像this回答了大多数“为什么”的问题。问题,而不是“如何解决?”一个

  5. this似乎与“如何解决?”有关方面(我已将其显示给我们的后端开发人员,我们将看看是否有帮助)

0 个答案:

没有答案