最近在开发时,发现客户端的文件上传有两种头:
第一种是带有Content-Length的:
带有content-length的上传
第二种是不带Content-Length的:
不带content-length的上传
一般来讲,上传文件需要在请求头中带上content-length,以告知服务端需要接受的数据包大小。
但HTTP协议中提供了另一种方式,来约定上传边界。就是以分块编码形式来发送数据。
数据发送方式在headers.Transfer-Encoding中表现。
文中指出:
分块编码主要应用于如下场景,即要传输大量的数据,但是在请求在没有被处理完之前响应的长度是无法获得的。例如,当需要用从数据库中查询获得的数据生成一个大的HTML表格的时候,或者需要传输大量的图片的时候。
对服务端来说,应该注意支持这种上传方式。
对nodejs服务端来说,formidable这种库默认支持分块编码上传。但仍需考虑到经过代理、CDN时,上传可能出现的异常。