美文网首页
axios设置请求头无效

axios设置请求头无效

作者: 变量只提升声明不提升赋值 | 来源:发表于2021-11-24 16:17 被阅读0次

在使用axios设置请求头是遇到的问题

    axios.request({
      url: 'xxx',
      headers: {
        'Content-Type': 'application/text',
        Authorization: getUserInfo('token'),
      },
      params: {
        status: 1
      }
    }).then(res => {

    })

这样设置后发现无效,Authorization有效。但是Content-Type怎么都出不来。
后面尝试了各种方法,创建axios实例。在实例上设置请求头。发现不行
然后又尝试将headers改成header,发现依旧不行。
给axios设置默认请求头,还还还是不行。
心态崩了。

后面以为是没有指定请求方式,所以导致请求头失效。结果设置了method之后,发现还是没有用。

最后瞎搞发现将params换成data。请求头就设置上去了。

后面百度了解到 axios内部做了个判断,如果是get请求。是不让你设置请求头的。而他的判断就是依据data是否存在,如果data存在则默认你是post请求。允许设置请求头。

但是后端要求这个接口必须是get的。
最后解决办法如下

  axios.interceptors.request.use(config => {
      if (config.method === 'get') {
        //  给data赋值以绕过if判断
        config.data = true
      }
      config.headers['Content-Type'] = 'application/text'
      return config
    }, err => Promise.reject(err))

通过拦截器给这个请求添加data。然后再去设置请求头。即可成功

最后记录一下百度过程中收货到的知识

HTTP协议中的Accept与Content-Type的区别

  1. 类型不同
    类型不同Accept属于请求头, Content-Type属于实体头。

Http报头分为通用报头,请求报头,响应报头和实体报头。

请求方的HTTP报头结构:通用报头|请求报头|实体报头
响应方的HTTP报头结构:通用报头|响应报头|实体报头

  1. 作用不同
    Accept代表发送端(客户端)希望接受的数据类型。 比如:Accept:text/xml; 代表客户端希望接受的数据类型是xml类型。

Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。 比如:Content-Type:text/html; 代表发送端发送的数据格式是html。

二者合起来, Accept:text/xml; Content-Type:text/html ,即代表希望接受的数据类型是xml格式,本次请求发送的数据的数据格式是html。

相关文章

网友评论

      本文标题:axios设置请求头无效

      本文链接:https://www.haomeiwen.com/subject/vrnntrtx.html