HTTP multipart/form-data 请求协议分析

时间:2022-07-05 13:48:09

协议头和协议体以"\r\n\r\n"分隔

协议体的内容通过content-length的长度获取


附件上传时如下

  POST/logsys/home/uploadIspeedLog!doDefault.html HTTP/1.1 

  Accept: text/plain, */* 
  Accept-Language: zh-cn 
  Host: 192.168.24.56
  Content-Type:multipart/form-data;boundary=-----------------------------7db372eb000e2
  User-Agent: WinHttpClient 
  Content-Length: 3693
  Connection: Keep-Alive

  -------------------------------7db372eb000e2

  Content-Disposition: form-data; name="file"; filename="kn.jpg"

  Content-Type: image/jpeg

  (此处省略jpeg文件二进制数据...)

  -------------------------------7db372eb000e2--


红色字体部分就是协议的头,其中,content-type是必须的,它包括一个类似标志性质的名为boundary的标志,它可以是随便输入的字符串。

Content-Length: 3693 ,这里的3693是要上传文件的总长度。如果设置Transfer-Encoding: chunked可以不用设置Content-Length

绿色字体部分就是需要上传的数据,可以是文本,也可以是图片等。数据内容前面需要有Content-Disposition, Content-Type以及Content-Transfer-Encoding等说明字段。

最后的紫色部分就是协议的结尾了。