一、为什么 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 即可。