客户端上传方面的Multipart和Form之间的差异

时间:2013-06-04 04:22:54

标签: asp.net http azure iis-7

我使用HttpClient库创建了C#客户端。

我使用BASE64编码数据来上传文件(通过POST)。 有时,我遇到错误(可能是因为内容长度限制),即使数据不是太大(大约500kB)。

我将其更改为MultipartFormData POST,正如我们所料,它运行正常,超过1MB。

Web服务器是否以简单的Form POST和Multipart POST方式处理会话?

请注意,我使用的Web服务是Azure WebSites。

1 个答案:

答案 0 :(得分:2)

这不是Azure或IIS中的任何限制。这就是HTTP协议的设计方式!详细了解Form元素here的不同类型的内容类型。

来自规范:

  

application / x-www-form-urlencoded

     

这是默认内容类型。使用此内容提交的表单   类型必须编码如下:

     

转义控件名称和值。空格字符被替换为   +', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by %HH',百分号和两个十六进制数字代表   字符的ASCII码。换行符表示为“CR LF”   对(即'%0D%0A')....

现在为Multipart:

  

multipart / form-data

     

内容类型“application / x-www-form-urlencoded”效率低下   用于发送大量二进制数据或包含的文本   非ASCII字符。内容类型“multipart / form-data”应该是   用于提交包含文件,非ASCII数据和表单的表单   二进制数据。

     

内容“multipart / form-data”遵循所有multipart的规则   [RFC2045]中概述的MIME数据流。的定义   “multipart / form-data”可在[IANA]注册表中找到。

因此,要上传文件,您应始终使用multipart/form-data。不仅仅是Azure,不仅仅是IIS,还有任何托管服务提供商和任何实现HTTP协议标准的 Web服务器。