axios post怎么使用?传大量数据时,出现413 FULL head

发布于 2022-09-06 07:33:29 字数 436 浏览 10 评论 0

使用axios发布文章,代码如下:

this.$axios({
    method: 'post',
    url: '/post',
    data: {
        description: opt.editorContent,
        time: time,
        ...
    },
})
.then(res => {
    ...
}

发送的请求是json格式的,后台常规方式无法获取,而且当description数据过大会报413 FULL head错误
手动改Content-Type也不起作用

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

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

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

发布评论

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

评论(3

清风疏影 2022-09-13 07:33:29

更新:
刚刚在sf看到一个终极解决方案

// http request 拦截器
axios.interceptors.request.use(
  config => {
    if (config.method === 'post' || config.method === 'put') {
      config.data = qs.stringify(config.data)
      // config.headers['Content-Type'] = 'application/x-www-form-urlencoded' 可以不配置,会自动识别
    }
    return config
  },
  err => {
    return Promise.reject(err)
  })

==================

这个问题卡了一天了,百度谷歌都搜了一圈了,issue里也有一些信息(都使用了qs.stringify),但都使用了别名方式:

axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));

记录下解决方法:
按道理,使用post方式,应该使用['Content-Type'] = 'application/x-www-form-urlencoded'方式才对。。。为什么还是json类型的。
之前post一直是用params参数传递,导致和get请求一样,变成了URL parameters跟在url里,导致了url太长,413 FULL head报错了
我喜欢使用配置的方式写axios,此时post需要在transformRequest里处理了,才能识别为x-www-form-urlencoded类型

this.$axios({
    method: 'post',
    url: '/post',
    data: {
        description: opt.editorContent,
        time: time,
        ...
    },
    transformRequest: [function (data, headers) {
        console.log(headers)
        return qs.stringify(data)
    }],
})
.then(res => {
    ...
}
远昼 2022-09-13 07:33:29

哈哈,这个我刚用axios时也遇到过,jq的ajax是默认 application/x-www-form-urlencoded 的,也就是已经加密过的,但是 axios 不是。

北渚 2022-09-13 07:33:29

感谢分享,学习了,倒是一直没遇到过这个问题

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