application/form-urlencoded或multipart / form-data?

  • 回答 (2)
  • 关注 (0)
  • 查看 (116)

在HTTP有两种方法来POST数据:application/x-www-form-urlencoded和multipart/form-data。据我所知,大多数浏览器只能multipart/form-data使用上传文件。在API上下文中使用其中一种编码类型(不涉及浏览器)时,是否还有其他的方式?

到目前为止,我基本上没有在网上找到有关使用不同内容类型的正式说法。

第三蓝河第三蓝河提问于
天使的炫翼回答于

如果你有二进制(非字母数字)数据(或者一个大小有限的数据)传输,使用multipart/form-data。否则,使用application/x-www-form-urlencoded。

帅的惊动我国计算机大神回答于

不认为HTTP是多部分或x-www-form-urlencoded限于POST。的内容类型标头是垂直于HTTP POST方法(可以填充适合你MIME类型)。对于典型的基于HTML表示的webapps也是如此(例如,json有效载荷变得非常流行,用于发送有效载荷的Ajax请求)。

关于Restful API over HTTP,我最常用的内容类型是application / xml和application / json。

应用程序/ XML:

data-size:XML非常详细,但通常在使用压缩时并不是问题,并且认为写入访问情况(例如通过POST或PUT)比读取访问更为罕见(在许多情况下,它是所有流量的3% )。在那里我不得不优化写性能的情况很少

是否存在非ASCII字符:可以使用utf-8作为XML中的编码

二进制数据的存在:需要使用base64编码

文件名数据:你可以用XML封装这个内部字段

应用程序/ JSON

数据大小:比XML更紧凑,还是文本,但是可以压缩

非ASCII字符:json是utf-8

二进制数据:base64(也见json-binary-question)

文件名数据:在json里封装成自己的字段

二进制数据为自己的资源

我会尝试将二进制数据表示为自己的资产/资源。它增加了另一个呼叫,但更好地分离的东西。示例图像:

POST /images
Content-type: multipart/mixed; boundary="xxxx" 
... multipart data
201 Created
Location: http://imageserver.org/../foo.jpg  

在后面的资源中,您可以简单地将二进制资源内联为链接:

<main-resource>
 ...
 <link href="http://imageserver.org/../foo.jpg"/>
</main-resource>

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励