博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
application/x-www-urlencoded与multipart/form-data
阅读量:6713 次
发布时间:2019-06-25

本文共 1357 字,大约阅读时间需要 4 分钟。

学习ajax时,学到了GET与POST两种HTTP方法,于是去W3C看了二者的区别,里面提到了二者的编码类型不同,就在网上查阅了相关资料, 在这里把我查阅到的相关结果记录在此,方便以后学习,详细了解一下application/x-www-form-urlencoded和multipart/form-data的区别以及用法。

一、表单

在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。 例如: application/x-www-form-urlencoded: 窗体数据被编码为名称/值(键值对)对。这是标准的编码格式。 multipart/form-data: 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分,这个一般文件上传时用。 text/plain: 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。 

二、常用的编码方式

form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded。

1.x-www-form-urlencoded

当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串append到url后面,用?分割,加载这个新的url。

2.multipart/form-data

当action为post时候,浏览器把form数据封装到http body中,然后发送到server。 如果没有type=file的控件,用默认的application/x-www-form-urlencoded就可以了。 但是如果有type=file的话,就要用到multipart/form-data了。浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。

 ​​​

 

每一段------WebKitFormBoundaryh2rFWhmmPZSuKvgf--为对应一部分消息

enctype="multipart/form-data"是上传二进制数据;它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。form里面的input的值以2进制的方式传过去,所以request就得不到值了。传输到你的servlet里是二进制数据,包括那个title,所以你用request.getParameter("title")是得不到值的,必须把数据再换为String的。而struts2里就可以了,因为它自动给你转换了。

 

转载于:https://www.cnblogs.com/starCity/p/9994220.html

你可能感兴趣的文章
maven 注册 jar
查看>>
高并发写入mysql的设计
查看>>
成长点滴:我不知道该说些什么?
查看>>
Android widget 桌面组件开发
查看>>
HP EVA4400服务器RAID信息丢失数据恢复方法
查看>>
我的友情链接
查看>>
heap中的heapify与依次压入队列的差异
查看>>
找工作体会
查看>>
linux之使用man查看命令手册
查看>>
健康常识
查看>>
Centos 6.3安装配置supervisor进程管理工具
查看>>
jquery ajax超时设置
查看>>
有兴趣,便且坚持下来。。。。。make it
查看>>
我的友情链接
查看>>
takeown 卸载cygwin
查看>>
spring定时器----JobExecutionContext
查看>>
AIX账户安全管理
查看>>
ARM流水线
查看>>
5015/5/5 谈谈http协议
查看>>
nagios安装部署
查看>>