Axios GET 不能设置Content-Type

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_24729895/article/details/80367460

最近在与后端的项目对接中,接口工具使用了axios这个东西。怎么说那 ,反正有很多坑,在后端的请求中要设置GET 请求中要设置header中的Content-Type为application/json; charset=utf-8

我目视了两秒钟很简单的嘛

var $http  = axios.create({
  baseURL: url,
  headers: {
    'Content-Type': 'application/json; charset=utf-8'
  }
  ...
})

洒洒水啦 ,是不是很容易

然后。。然后。。我艹what fuck,一看请求中header中没得这个玩意儿,但是除了Content-Type都是可以设置的

此时此刻一万句mmp要将,百度一大推也都没啥用

然后本人就去读了一哈源码,npm包中的源码 axios/lib/xhr.js,写了什么,我艹 他写了什么

118---129

    // Add headers to the request
    if ('setRequestHeader' in request) {
      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
          // Remove Content-Type if data is undefined
          delete requestHeaders[key];
        } else {
          // Otherwise add header to the request
          request.setRequestHeader(key, val);
        }
      });
    }

然后看这个if判段, 哔了狗了

然后就有那么几个解决办法,下面我写一写哈

  • 方法一
  •     //修改这段代码
        // Add headers to the request
        if ('setRequestHeader' in request) {
          utils.forEach(requestHeaders, function setRequestHeader(val, key) {
            //if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
              // Remove Content-Type if data is undefined
              //delete requestHeaders[key];
            //} else {
              // Otherwise add header to the request
              request.setRequestHeader(key, val);
            //}
          });
        }

    好了,行了行了,现在可以了

    • 方法二
      我们不能随随便便改人家的npm包啊,万一下次别人安装的时候那不是又要去改,咋办呢,看下面这个方法
    var $http
    // 添加一个新的axios实例
    $http = axios.create({
      baseURL: url,
      headers: {
        'Content-Type': 'application/json; charset=utf-8'
      }
    })
    // 添加请求拦截器
    $http.interceptors.request.use(function (config) {
      // 在发送请求之前做些什么
      // 随便写个值 绕过if判段
      if (config.method == 'get') {
        config.data = true
      }
      config.headers['H-TOKEN'] = '111'
      return config;
    }, function (error) {
      // 对请求错误做些什么
      return Promise.reject(error);
    });

    现在哥哥告诉你,随便在get请求中设置header那还不是简简单单的事情

    axios这么做的原因, 是因为GET请求本身是不需要Content-type,塔属于简单请求


    现在去官网提个bug看看他们会采纳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值