表单的POST与GET
服务器表单默认提交方式是POST
HTML表单默认提交方式是GET
选择GET方式提交时,表单内的所有表单元素的name属性和value值都出现在URL中,也就是说GET请求的数据会附在URL之后;
选择POST方式提交时,URL中不会出现任何表单元素,POST把提交的数据则放置在是HTTP包的包体(request-body)中;
这两种方式都是通过HTTP协议进行传递的,它们传递的数据均包含在HTTP头信息中;
GET方式在request-line中传送数据;POST方式在request-line及request-body中均可以传送数据。
这句话的理解为:GET通过在request-line中传送数据,但它只提交表单域中的数据,对于action标签属性中如果存在?子句它将不予处理(就是说在GET方式下指定表单的action标签属性中?子句是没用的)。
而POST方式传送数据时,表单域中的数据将作为request-body提交,action标签属性中的?子句将在request-line中得以保留(就是说同时可以用Request.QueryString方式获取action标签属性中?子句的数据)。
GET方式提交的数据最多只能是1024字节(其实是URL的长度限制),理论上POST没有限制;
当以GET方式发送表单时,发送的HTTP请求没有request-body部分,所以不需要指定enctype标签属性;
GET方式只提交表单域中的数据,action标签属性中如果存在?子句,GET方式将不予处理。
以GET方式提交表单时,每个表单域的NAME与VALUE要以URL的方式提交,所以每个表单域的NAME与VALUE均要进行URL Encoding处理。这个操作通常是由用户端浏览器完成的。
当以POST方式发送表单时,表单域中的数据将作为request-body提交,action标签属性中的?子句将在request-line中得以保留。
数据主体的编码方式
在HTTP请求中,request-line总是以application/x-www-form-urlencoded方式编码。
enctype标签属性只对request-body起作用。也就是说只有在method="POST"的情况下,设置enctype才起作用。
设置enctype标签属性后,在HTTP请求的头部(headers)信息中会多出一行Content-Type信息,并且request-body部分将会以Content-Type指定的MIME进行编码。这些操作都是由客户端浏览器自动完成的。
在没有指定enctype标签属性时,表单以默认的application/x-www-form-urlencoded方式对request-body进行编码,
如果表单中包含需要上传的文件数据,则在指定method="POST"的同时还要指定enctype="multipart/form-data";
以上内容参考资料:http://blog.csdn.net/darxin/article/details/4944225
特别提醒:如果是表单嵌套的情况,提交时会出现事件冒泡现象,值得注意!
附一个实验的例子:
<form method="GET" action="">
提交数据:
<input name="oStr" type="text">
<br>
提交方式:
<select name="select" onchange="this.form.method=this.value">
<option value="Post" selected>Post</option>
<option value="Get">Get</option>
</select>
<br>
<input type="submit" name="Submit" value="提交">
</form>
C#:
Response.Write("post:" + Request.Form["oStr"]);
Response.Write("<br/>get:" + Request.QueryString["oStr"]);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端