x-www-form-urlencoded和multipart/form-data的区别

摘要:
meta charset=“utf-8”>formaction=“/”method=“POST”enctype=“application/x-www-form-urlencoded”>inputtype=“text”name=“name”>&书信电报;br>&lt:inputype=“text”name=“age”>

结论

当有二进制数据传输时,使用 multipart/form-data,否则使用 x-www-form-urlencoded。

区别

x-www-form-urlencoded 和 multipart/form-data 是HTTP协议中,向服务器发送POST请求时的两种编码方案,对应form表单的enctype属性。

<!DOCTYPE html>
<html>
<head> 
    <meta charset="utf-8"> 
</head>
<body>
    <form action="/" method="POST" enctype="application/x-www-form-urlencoded">
        姓名: <input type="text" name="name"><br>
        年龄: <input type="text" name="age">
        <input type="submit" value="提交">
    </form>
</body>
</html>

x-www-form-urlencoded

默认情况下,使用该编码,数据通过 name/value 数据对传输。

POST / HTTP/1.1
Host: localhost:8080
Content-Length: 233

name=june&age=12

如果编码中含有unicode字符,则需要进行转换处理后再传输,比如:

name=%E6%B5%8B%E8%AF%95&age=12

以%开头后跟两个十六进制,代表一个字节,使用utf-8编码将字符转为字节序列。

multipart/form-data

当需要上传文件时,使用该编码。数据以指定的分隔符分开,数据也无需编码转换。

POST / HTTP/1.1
Host: localhost:8080
Content-Length: 233
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfPIuyKYREDzq8zXG

------WebKitFormBoundaryfPIuyKYREDzq8zXG
Content-Disposition: form-data; name="name"

张三
------WebKitFormBoundaryfPIuyKYREDzq8zXG
Content-Disposition: form-data; name="age"

12
------WebKitFormBoundaryfPIuyKYREDzq8zXG--

现在流行restful风格的接口,请求体使用json作为数据格式,对应的Content-Type为 application/json

参考资料

application-x-www-form-urlencoded-or-multipart-form-data

免责声明:文章转载自《x-www-form-urlencoded和multipart/form-data的区别》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx高并发优化JavaScript跨域问题的解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Swift 2.1】为 UIView 添加点击事件和点击效果

前言   UIView 不像 UIButton 加了点击事件就会有点击效果,体验要差不少,这里分别通过自定义和扩展来实现类似 UIButton 的效果。 声明  欢迎转载,但请保留文章原始出处:)   博客园:http://www.cnblogs.com  农民伯伯: http://over140.cnblogs.com 正文   一、为 UIView 添...

关于箭头函数

一、为什么存在 const Person = { 'name': 'little bear', 'age': 18, 'sayHello': function () { setInterval(function () { console.log('我叫' + this.name + '我今年' + thi...

redis在linux上部署,Redis服务器搭建/配置/及Jedis客户端的使用方法(java语言)

转自http://my.oschina.net/gccr/blog/307725?fromerr=yX8AifBq   Redis服务器搭建 安装 在命令行执行下面的命令: $ wget http://download.redis.io/releases/redis-2.8.13.tar.gz $ tar xzf redis-2.8.13.tar.g...

easyui扩展行默认展开 以及 去除滚动条

 问题背景: 在做打印页面的时候,要求有详细的默认展开显示。    遇到的问题: 1)在用扩展行的时候,grid的所有行都添加了展开收起的图标,(第二行没有明细)如下  2)默认展示有详细行的时候,内容被滚动条遮挡(影响打印)    3) 解决方法:在easyui扩展行的 onLoadSuccess 函数里进行处理  1 $list.datag...

随机数的深究

几乎所有编程语言中都提供了"生成一个随机数"的方法,也就是调用这个方法会生成一个数,我们事先也不知道它生成什么数。比如在.Net中编写下面的代码: Random rand = newRandom(); Console.WriteLine(rand.Next()); 运行后结果如下:     Next()方法用来返回一个随机数。同样的代码你执行和我...

mybatis 遇到空串无法判断

sql 语句中对传入的关键字进行判断,如果是空或者空串则不进入条件 <if test="query.keyword !=null and query.keyword != ''"> and (t.id like concat('%',#{query.keyword},'%') or...