表单提交原理
1.HTTP是如何提交表单的
<form>标签的属性enctype设置以何种编码方式提交表单数据。可选的值有三个:
application/x-www-form-urlencoded:
这是默认的编码方式。它只处理表单域里的value属性值,采用这种变法方式的表单会将表单域的值处理成URL方式。
multipart/form-data:
这种编码方式会以二进制流的方式来处理表单数据,这中编码方式会把文件域指定的文件内容也封装到请求参数里。
text/plain:
这种方式当表单的action属性值为mailto:URL的形式时比较方便,这种方式主要适用于直接通过表单发送邮件。
2.文件标签
<input type="file" name="myfile">标签用来提交文件。要注意的是,这个标签的value值并不是所选择的文件内容,而是这个文件的完整路径名。正如前面所说的,表单在提交表单时,如果采用默认编码方式,文件的内容是不会被提交的。要提交文件内容要采用multipart/form-data编码方式,这需要在服务器端从提交的二进制流中读取文件内容。
3.从客户端获得输入流
Request.InputStream能够以二进制数据的方式获取请求主体(包含了表单域内容)。它包含了请求主体的内容。通过这个InputStrem可以读取表单的内容(包括文件内容)。
4.文件上传简介
通过Request.InputStream 方法获得表单数据流后,我们就可以手动处理表单数据了。
先来看看form标签是怎么写的:
<form action="upload.ashx"enctype="mutltipart/form-data" method="post">
<input type="file" name="f" />
<input type="text" name="comment"></input>
<input type="submit" name="btnUpload " value="上传" />
</form>
当表单的enctype被设置成multipart/form-data后, comment文本域的内容可以通过request.form[“comment”]来获得,文件f的内容只能通过request.inputstream来获得,但是request.inputstream并不是只包含了文件的内容,还包括了comment文本域的内容,看看打印出inputstream的内容:
------WebKitFormBoundaryQqpAxgR2Pgik6uyY
Content-Disposition: form-data; name="f"; filename="hello.txt"
Content-Type: application/octet-stream
Hello!!!
------WebKitFormBoundaryQqpAxgR2Pgik6uyY
Content-Disposition: form-data; name="comment"
文件上传
------WebKitFormBoundaryQqpAxgR2Pgik6uyY
Content-Disposition: form-data; name="buttom"
上传
------WebKitFormBoundaryQqpAxgR2Pgik6uyY--
可以看到提交的表单数据是混合了所有请求参数的数据。 从上面表单数据的内容可以看到,每个请求参数都以----开头的行开始,后面跟的字符不同的浏览器不同。接下来俩行是参数的描述,然后空行后接参数的值(对文件input稍微有所不同,即空行后是附加的文件内容)。表单数据以--开始和结尾的行结束。
明白了表单数据的格式后,就可以编程解析表单数据了,我们可以把文件从表单数据中解析出来。
分享到:
相关推荐
QapTcha拖动验证码提交表单
好友使用vue技术封装了一个专门用于提交表单和下载文件的“防抖按钮”,其实现原理和使用方法看这里 https://blog.csdn.net/PursueExcellence/article/details/103903139。
回车键触发表单提交代码 回车键触发表单提交原理 回车键触发表单提交思想
服务器端避免表单的重复提交,利用同步令牌来解决重复提交的基本原理如下:(1)用户访问提交数据的页面,服务器端在这次会话中,创建一个session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域的值,随表单一起发送到...
1.3 表单提交数据的两种方式 1.3.1 两种方式 1、get 2、post 1.3.2 区别 1、外观上看 get提交在地址上可以看到参数 post提交在地址栏上看不到参数 2、安全性 get不安全 post安全 3、提交原理 get...
利用curl原理抓取京东的商品价格,获取商品的列表
主要介绍了AJAX提交表单数据的方法,实例分析了Ajax调用的原理与实现技巧,需要的朋友可以参考下
模拟表单提交的原理: 我们都知道Http是无状态的,所以当我们提交的数据和浏览器中正常提交一样,那么服务器就会返回和浏览器中一样的响应。所以我们这里来模拟浏览器表单提交登录广东工业大学的图书馆 ...
这个原理比较的简单就是用户第一次提交时我们记录提交用户的IP地址,这样如果用户在固定时间内再次提交表单就会提示重复提交了,这种做法通常用于在顶一下,支持一下这种应用中了,在防止数据重复提交是一个非常不好的...
主要介绍了Java后台防止客户端重复请求、提交表单实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在编写代码之前, 有必须先搞清楚在表单提交期间,浏览器是怎样将数据发送给服务器的。 1. 对表单字段的名称和值进行 URL 编码,使用和号(&)分隔。 2. 不发送禁用的表单字段。 3. 只发送勾选的复选框和单选按钮...
本文实例讲述了php表单加入Token防止重复提交的方法。分享给大家供大家参考,具体如下: Token浅谈 Token,就是令牌,最大的特点就是随机性,不可预测。...下次客户端提交请求时,Token会随着表单一起提交到服务器
在公司后台做表单提交,一是自己员工用,二是 html 自己来写的,没有验证表单重复提交,结果出错了。写出来记录下以便提醒自己,时刻不能疏忽。 解决方法 其实方法有很多种,只举例几个简单的来说说。 框架 很多框架...
由于刷新提交表单,实际上提交的就是上一次正常提交的表单,所以我们只要做一个标志,判断出是新表单还是上一次的旧表单就可以分辨出是否进行了重复提交操作。 实现方法: 在页面上放置一个Hidden域,当页面第一次...
具体的原理是:当表单在提交数据的时候,不将提交目标设置为当前的页面,而是当前页面中的一个嵌入框架。首先你应该在body下面插入一个嵌入框架: 复制代码代码如下:<iframe style=”width:0; height:0; margin-...
此动态form表单是基于element-ui里的el-form表单基础上进行修改而来,它实现了新增表单项、删除表单项、表单验证和重置表单、表单提交等form表单所拥有的基本功能。 原理分析: 此form表单每一项绑定的值组成一个...
网站中防止表单重复提交是一个比较普遍的需求,先看原理实现方法也有很多。
基本原理就是在页面增加一个隐藏iframe,然后通过ajax提交除文件之外的表单数据,在表单数据提交成功之后的回调函数中,通过form单独提交文件,而这个提交文件的form的target就指向前述隐藏的iframe。 html 代码 ...
如果加入了验证码,那么在表单提交的时候会多加一个额外的验证,判断这个验证码是否已经成功完成了操作。如果没有的话,那就直接取消表单的提交,然后顺便提示说”您的验证没通过,请重新验证“,诸如此类的话。所以...