xhr multipart boundary分隔符

Posted ksyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xhr multipart boundary分隔符相关的知识,希望对你有一定的参考价值。

首先是http请求常见的3种格式:

  • x-www-form-urlencoded
  • application/json
  • multipart/form-data

x-www-form-urlencoded

  最常见的格式。多用于get请求,数据按照键值对 key1=val1&key2=val2 的方式进行编码。

application/json 

  需要发送json数据时使用,原生xhr不能直接发送object对象,要用JSON.stringify(object)转义成真正的JSON。

multipart/form-data 

  使用此头部发送时浏览器不会对数据进行编码,当需要发送文件时必须使用此头部。

  正常的multipart请求chrome头部信息

  技术图片

  Content-Type里的boundary是分隔符,后台会根据分隔符去获取请求体里的数据

  分隔符开始

  键1:值1
  键2:值2

  分隔符结束  

  这样去获取数据,而boundary就是指定分隔符号的标志。如果没设置,后台会无法定位哪里开始读取数据。

  技术图片

 

  上面这图中,Content-Type未设置boundary

  后台报错:Error: bad content-type header, no multipart boundary 就是这个原因

  大部分封装好的xhr会自己加上boundary,或者不指定头部,也会自动加上。

  如果使用原生xhr,不设置指定头部也会默认加上。

xhr.setRequestHeader(Content-Type,multipart/form-data);

  但是如果设置了指定头部,xhr不会改动头部信息,就会造成以上错误

  只需要注释掉这段代码就好。

//xhr.setRequestHeader(‘Content-Type‘,‘multipart/form-data‘);

 

 

  工作中遇到的坑,记录一下

 

以上是关于xhr multipart boundary分隔符的主要内容,如果未能解决你的问题,请参考以下文章

内容类型 'multipart/form-data;boundary=----...;charset=UTF-8' 不支持

post 提交之 multipart/form-data; boundary= ...

前端必知必会之文件上传攻略

SpringBoot报错:Content type ‘multipart/form-data;boundary=xxxx

Postman请求方式详解

NodeJs异步上传multer插件报Multipart: Boundary not found错误解决方法