vue-axios 请求拦截器 Get 请求之添加请求头 Content-Type 无效

虽说get请求一般不需要设置content-type这个headers, 但是最近有个需求, get也需要传content-type, 之前并未发现axios有这个东西, 记录一下:

config.data = { unused: 0 }; // 这个是关键点,加入这行就可以了,解决get,请求添加不上Content-Type
service.interceptors.request.use(
    config => {
        if (config.method === "get") {
            config.data = { unused: 0 }; // 这个是关键点,加入这行就可以了,解决get,请求添加不上Content-Type
        }
        config.headers["Content-type"] = "application/json;charset=UTF-8";
        return config;
    },
    error => {
        Promise.reject(error);
    }
);

ps:

Content-Type对get请求和post请求的影响

一. GET 请求

GET 请求不存在请求实体部分,键值对参数放置在 URL 尾部,****浏览器把form数据转换成一个字串(name1=value1&name2=value2...),然后把这个字串追加到url后面,用?分割,加载这个新的url。因此请求头不需要设置 Content-Type 字段

非 ASCII 码会自动进行编码转换,例如发送请求:www.bilibili.com?hehe=你的我的

值得一提的是,GET 参数的编码方式是无法人为干涉的,这导致了不同浏览器有不同的编码方式,因此最稳妥的方案是人工预编码,人工解码,从而禁止浏览器编码的干涉

二. POST 请求

Http Header里的Content-Type一般有这三种:

1.application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。默认行为。

会将表单内的数据转换拼接成 key-value 对(非 ASCII 码进行编码)

2.multipart/form-data(一般用来上传文件): 数据被编码为一条消息,页上的每个控件对应消息中的一个部分

3.text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。postman软件里标的是RAW。(中文不进行编码)

你可能感兴趣的:(vue-axios 请求拦截器 Get 请求之添加请求头 Content-Type 无效)