axios 的 GET 请求里,手动写 Content-Type: application/json 基本都会被删掉不是你写法错了是 axios 源码故意这么做的
一、为什么 GET 的 Content-Type 会被删掉看 axios 源码xhr.js里的逻辑if (typeof requestData undefined key.toLowerCase() content-type) { // Remove Content-Type if data is undefined delete requestHeaders[key]; }GET 请求默认没有data→requestData undefined只要是 GET你在 headers 里写的 Content-Type 会被直接删掉HTTP 规范本来也规定Content-Type 是描述请求体的GET 不该有 body所以下面这种写法永远不生效// ❌ 无效 axios.get(/api, { headers: { Content-Type: application/json }, params: { ... } })二、如果后端强行要这个头怎么绕过方案 1请求拦截器里强行塞一个空 data推荐axios.interceptors.request.use(config { // 让 GET 也有 dataaxios 就不会删 Content-Type if (config.method get config.data undefined) { config.data null; // 或 {}、true 都行 } // 再统一设置 config.headers[Content-Type] application/json; return config; });之后正常写 get 即可axios.get(/api, { params: { ... } })这时抓包会看到有Content-Type: application/json不会真带 body只是骗过 axios 的判断方案 2用 POST 伪装 GET接口允许的话axios.post(/api, {}, { headers: { Content-Type: application/json }, params: { ... } })方案 3全局默认头配合拦截器axios.defaults.headers.common[Content-Type] application/json;再配合上面拦截器给 GET 塞个 data就能全局生效。三、要不要这么做正常 RESTful 接口不需要。GET 就不该有 Content-Type后端设计不合理。老旧 / 第三方接口没办法只能用上面拦截器的方式硬塞。简单总结axios 会自动删除 GET 请求的 Content-Type因为 GET 无 body。要强行保留就在请求拦截器里给 GET 塞一个 datanull/{}再统一设置 Content-Type 即可。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2571164.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!