axios的content-type是自动设置的吗?

发布于 2022-09-11 18:46:09 字数 844 浏览 23 评论 0

比如我这样发送一个数据到后台 我发现请求头的content-type是application/json;charset=UTF-8

axios({
        url: '/login',
        method: 'post',
        data: {email: '666@qq.com', password: 123123}
})

如果发送下面这条数据 请求头的content-type就会变成multipart/form-data
我想问一下是axios根据发送内容自动设置的content-type吗?不用自己设置吗?

let formData = new FormData()
formData.append('name', 'aaa')
axios({
        url: '/login',
        method: 'post',
        data: formData 
})

还有一个问题我想在axios拦截器里面查看当前请求头的content-type类型?我发现下面这样输出的是undefined 这是为什么?
如果打印config.headers就下面图片中的样子

axios.interceptors.request.use(
  config => {
    console.log(config.headers['Content-Type'])  //提示undefined
  }
)

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

九歌凝 2022-09-18 18:46:09

在 data 是 内置对象的时候会进行一些自动设置,当 data 是 FormData 时自动设置(严格来说是强制删除)content-type 的值,让浏览器自己设置。当 data 为 URLSearchParams 对象时设置为 application/x-www-form-urlencoded;charset=utf-8, 当 data 为普通对象时,会被设置为 application/json;charset=utf-8

倒带 2022-09-18 18:46:09

是自动设置的
transformRequestdefaults.transformRequest,判断了URLobject,分别自动设置了application/x-www-form-urlencoded,application/json
这里的自动设置是没有Content-Type的时候才设置,当你在之前已经设置了Content-Type这里是不会自动设置的

multipart/form-data 是 发送ajax之前 xhrAdapter 里, 判断是否是 FormData如果是就删除Content-Type这个 key,因为浏览器会自动的设置
这里的设置是强制的只要你的 dataFormData 就会删掉 Content-Type

至于你再拦截器里看不到是
拦截器request -> 拦截器request -> ... -> dispatchRequest -> 拦截器response -> ...
自动设置是在 dispatchRequest 里的,在拦截器request之后

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文