首页 > 其他分享 >application/x-www-form-urlencoded & multipart/form-data & text/plain

application/x-www-form-urlencoded & multipart/form-data & text/plain

时间:2023-05-06 14:01:04浏览次数:38  
标签:www form text 表单 application multipart data


FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型

 

 

我们知道在通过POST方式向服务器发送AJAX请求时最好要通过设置请求头来指定为application/x-www-form-urlencoded编码类型。知道通过表单上传文件时必须指定编码类型为"multipart/form-data"。而text/plain是我们在做纯文本传输时防止接收数据时出现编码混乱而设置的。为什么要这么设置?以下三者的区别。

 

 

application/x-www-form-urlencoded

这是通过表单发送数据时默认的编码类型。我们没有在from标签中设置enctype属性时默认就是application/x-www-form-urlencoded类型的。application/x-www-form-urlencoded编码类型会把表单中发送的数据编码为“名称/值”对。这是标准的编码格式。当表单的ACTION为POST的时候,浏览器把form数据封装到http body中,然后发送到服务器。当表单的ACTION为GET的时候,application/x-www-form-urlencoded编码类型会把表单中发送的数据转换成一个字符串(name=coderbolg&key=php),然后把这个字符串附加到URL后面,并用?分割,接着就请求这个新的URL。当我们通过POST方式向服务器发送AJAX请求时最好要通过设置请求头来指定为application/x-www-form-urlencoded编码类型。方法是在xmlobject.open()方法之后添加xmlobject.setRequestHeader("Content-Type","application/x-www-form-urlencoded") 不然服务器会接收不到POST过来的数据。

 

 

multipart/form-data

然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时“application/x-www-form-urlencoded”这种编码方式效率很低。在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。

 Browser端<form>表单的ENCTYPE属性值为multipart/form-data,它告诉我们传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是post方法,<input>的type属性必须是file。(表单里有图片上传用ENCTYPE="multipart/form-data")。

<form name="userInfo" method="post" action="first_submit.jsp"    ENCTYPE="multipart/form-data">
表单标签中设置enctype="multipart/form-data"来确保匿名上载文件的正确编码。如下:
<tr>
      <td height="30" align="right">上传企业营业执照图片:</td>
      <td><INPUT TYPE="FILE" NAME="uploadfile" SIZE="34"    onChange="checkimage()"></td>
</tr>

当表单中有file类型控件并希望它正常工作的话,就必须设置成multipart/form-data类型,浏览器会把整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件 name)等信息,并加上分割符(boundary)。

 

:enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。

form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,取表单值加入数据库时,用到下面的:

SmartUpload su = new SmartUpload();//新建一个SmartUpload对象

su.getRequest().getParameterValues();取数组值

su.getRequest().getParameter( );取单个参数单个值

 

 

text/plain

数据以纯文本形式进行编码,其中不含任何控件或格式字符

标签:www,form,text,表单,application,multipart,data
From: https://blog.51cto.com/u_16070335/6249626

相关文章

  • jQuery 获得 form 表单值
     jquery如何取得text,areatext,radio,checkbox,select的值,以及其他一些操作;假如我们有如下页面:<inputtype="text"name="textname"id="text_id"value="">  ...下面来看怎么取得FORM中的各种值等等;functionget_form_value(){/*获得TEXT.AREATEXT的值*/va......
  • MySQL5.7 访问Information_schema.TABLES 导至内存持续增长
    在生产环境5.7.30的数据库中,部署了MYSQL监控,但是发现部署完监控后,mysqld的内存持续增长。后通过监控发现也正是监控用户占用了大量的内存。目录适用范围问题概述问题原因解决方案参考文档适用范围mysql5.7问题概述在生产环境5.7.30的数据库中,部署了MYSQL监......
  • 在Winform分页控件中集成保存用户列表显示字段及宽度调整设置
    在Winform的分页控件里面,我们提供了很多丰富的功能,如常规分页,中文转义、导出Excel、导出PDF等,基于DevExpress的样式的分页控件,我们在其上面做了不少封装,以便更好的使用,其中就包括集成保存用户列表显示字段及宽度调整设置。本篇随笔介绍这个实现的过程,通过在当前程序中序列化方式存......
  • 使用nacos配置,启动服务时一直报 Error starting ApplicationContext. To display the
    报错日志如下:ErrorstartingApplicationContext.Todisplaytheconditionsreportre-runyourapplicationwith'debug'enabled.-2023-05-0509:46:02.328[TID:N/A]ERROR8236---[main]o.s.b.d.LoggingFailureAnalysisReporter:***********......
  • WPF项目中使用WInform版本的 ChromiumWebBrowser控件嵌套网页 解决中文输入法候选框定
    创建一个用户控件,后台代码:publicpartialclassCefControl:UserControl{ChromiumWebBrowserwebView=null;publicCefControl(){InitializeComponent();if(!CefSharp.Cef.IsInitialized){......
  • GetTextAsync 或 异步函数执行完毕后的处理技巧
    //方法一Task.Factory.StartNew(()=>                       {                           //inti=0;                           //varpageText=wb.GetTextAsync();         ......
  • kettle从入门到精通 第十七课 kettle Transformation executor
    Transformationexecutor步骤是一个流程控件,和映射控件类似却又不一样。1、子转换需要配合使用从结果获取记录和复制记录到结果两个步骤,而子映射需要配合映射输入规范和映射输出规范使用。如下子转换实现的功能是计算x+y的值 2、从结果获取记录1)步骤名称:自定义2)字段:设置从......
  • [MRCTF2020]Transform 1
    查壳:64位,先看看运行有问题吗:任意输入给你弹了一个wrong进IDA看看:解释:输入一个字符串,要满足字符串的长度为33,不然就报错。接下来是在输入的字符串中拿出特定的字符,进行异或后得到一个新的字符串,最后与特定的字符串对比。这样看来,我们先看要对比的字符串:还不短,但是我们只......
  • UVA11107 Life Forms
    怎么没有正常的后缀数组二分的题解啊给定\(n\)个字符串,求出最长的,在多于\(\left\lfloor\frac{n}{2}\right\rfloor\)个字符串中出现的子串,并按照字典序从小到大输出。\(n\leq100\),\(|S|\leq1000\),根据套路可以将所有字符串连成一个,不同的字符串用特殊符号隔开,然后建出新......
  • windows api编程中 常用变量名pszText 的 psz 代表什么意思
    来自ChatGPT的回答:在WindowsAPI编程中,pszText是一个常见的变量名,通常用于表示一个指向包含文本字符串的缓冲区的指针。其中,psz是一种常见的命名前缀,它代表“指向以零结尾的字符串指针(PointertoZero-terminatedString)”。这是因为在WindowsAPI中,许多函数和结构体成员都需要......