Axios无法设置Content-Type请求头,返回415错误求排查思路
问题原因分析 & 解决方案
首先得戳破核心问题:GET请求完全不需要设置Content-Type: application/json!
为什么会触发415错误?
Content-Type头的作用是告诉服务器「请求体里的数据格式是什么」,但GET请求默认是没有请求体的——你硬给它加这个头,服务器收到后会一脸困惑:你说请求体是JSON格式,但我根本没收到任何请求体内容啊?自然就返回415 Unsupported Media Type报错了。
针对你的两种方案的修正建议
方案1的修正
如果只是发起普通GET请求,直接删掉设置默认头的代码就行:
import axios from 'axios'; // 删掉这行多余的设置:axios.defaults.headers.common['Content-Type'] = 'application/json'; axios.get(url) .then(response => this.loadData(response)) .catch(error => this.showError(error));
要是你的实际需求是发送JSON格式的请求体(比如POST/PUT这类带请求体的请求),那才需要设置Content-Type,而且要搭配正确的请求方法:
import axios from 'axios'; axios.post(url, { username: 'test', password: '123' }, { headers: { 'Content-Type': 'application/json' } }) .then(response => this.loadData(response)) .catch(error => this.showError(error));
(其实Axios在你传入JS对象作为请求体时,会自动帮你设置Content-Type: application/json,这行头配置甚至可以省略)
方案2的补充(假设你想单独配置请求)
如果要单独给请求加配置,记住GET请求别加Content-Type;如果是POST/PUT这类带请求体的请求,正确写法是这样:
import axios from 'axios'; let config = { method: 'post', // 必须是post/put等带请求体的方法 url: url, headers: { 'Content-Type': 'application/json' }, data: { key: 'value' } // 要有对应的请求体数据,这个头才有意义 }; axios(config) .then(response => this.loadData(response)) .catch(error => this.showError(error));
额外提醒
别随便给所有请求默认设置Content-Type,尤其是GET请求,这纯粹是给自己挖坑;如果服务器确实要求GET请求带特殊头,一定要先确认服务器期望的具体头信息是什么,别硬塞application/json。
内容的提问来源于stack exchange,提问作者comiventor
相关产品推荐
相关产品推荐

