表单提交中get和post方式的区别

 我来答
阳光上的桥
2016-03-28 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65813
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
表单的GET、POST提交方法,在不同角度看来各有区别。

一、表单的编写人看来,GET方式的表单代码是这样的(表单1):
<form action='a.cgi' method=get>
<input type=text name=abc value=123>
...其它参数
</form>

POST方式的表单代码是这样的(表单2):
<form action='a.cgi' method=post>
<input type=text name=abc value=123>
...其它参数
</form>

还可以编写下面的表单,同时提交GET和POST内容,例如(表单3):
<form action='a.cgi?job=1' method=post>
<input type=text name=abc value=123>
...其它参数
</form>

二、跟踪浏览器的发现GET和POST表单的网络传输内容有区别,前面“表单1”提交的数据可能如下(省略了与本话题无关的一些内容):
GET /a.cgi?abc=123 HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

Accept-Encoding: gzip, deflate
Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Host: www.elearning.clic

Connection: Keep-Alive
可以看出,GET提交的表单参数是作为文件名的一部分提交请求。

前面“表单2”提交的数据可能如下(省略了与本话题无关的一些内容):
POST /a.cgi HTTP/1.1
Connection: Keep-Alive

abc=123
可以看出,POST提交的表单参数没有放在文件名的后面,单独作为数据包发送给服务器,在请求头之后空一行再发送POST数据。

前面“表单3”提交的数据可能如下(省略了与本话题无关的一些内容):
POST /a.cgi?job=1 HTTP/1.1
Connection: Keep-Alive

abc=123
可以看出这种方式实际上是同时有GET和POST提交数据内容。

三、浏览器用户在表单提交后,看见的地址栏内容不一样。对于GET方式提交的(表单1)浏览器会显示在地址栏显示提交的参数内容(a.cgi?abc=123),因此一般不用GET方式提交登录表单,否则密码也显示出来了,而且存在浏览器的历史里面。对于POST方式的表单(如表单2),浏览器地址只显示ACTION后面指定的内容(a.cgi),但是如果ACTION里面指定有GET传递参数(例如表单3),浏览器会显示这些参数(a.cgi?job=1)

四、服务器收到GET和POST提交的表单时,处理方式不同。对于GET方式提交的表单(例如表单1),HTTP服务器程序直接运行脚本a.cgi,把?之后的内容“abc=123”存放在环境变量QUERY_STRING中。

对于POST方式提交的表单(例如表单2),HTTP服务器运行脚本a.cgi,把接下来的数据包(abc=123)作为文件管道STDIN打开供a.cgi使用。

对于POST方式提交的表单如果文件名后面有?(例如表单3),HTTP服务器运行脚本a.cgi,把接下来的数据包(abc=123)作为文件管道STDIN打开供a.cgi使用,同时把?之后的内容“job=1”存放在环境变量QUERY_STRING中。

五、网站开发人员处理不同。对于a.cgi程序的编制者,可以不去关心使用GET还是POST提交的,而是分别在环境变量QUERY_STRING和标准输入STDIN里面获得数据,当然也可以区分GET和POST进行不同的处理。

从环境变量中获得GET参数的方法与编写a.cgi的程序语言有关,例如C语言可以getenv系统调用,再如PERL可以访问关联数组$ENV{'QUERY_STRING'}获得数据,而专门为网页而生的JSP、ASP、PHP这些可以更加抽象的直接访问数据,例如PHP使用$_GET超级数组。

从标准输入获得POST数据的方法与编写a.cgi的程序语言有关,对于C、PERL等语言,可以直接read调用STDIN文件,C语言甚至可以gets等获取。而专门为网页而生的JSP、ASP、PHP这些可以更加抽象的直接访问数据,例如PHP使用$_POST超级数组。

六、综上所述,GET和POST的区别比较多,主要有:

GET提供的东西或显示在浏览器地址上,而且可能存在在浏览器历史中,POST不会;

GET方式无需进行管道操作,传输少量数据的时候效率更高;

GET的内容有限制,文件名总长度有限制,环境变量也有限制,一般不用GET方式处理超过1024字节的参数。而POST提交的内容长度理论上没有限制,只是一般服务器管理员认为POST提交效率比FTP底下而进行了一定的限制(例如8M、2G不等)。

以上内容为本人原创,百度首发,管理员觉得抄袭请提供拷屏证据。
逆长小白菜
推荐于2018-03-04 · TA获得超过2万个赞
知道大有可为答主
回答量:1.7万
采纳率:94%
帮助的人:7697万
展开全部
表单的常用提交方式:
1) GET
浏览器将提交表单中的字段信息放置在请求头中,不适合大数据量的传输,
适合根据关键字作查询。
2) POST
浏览器将提交表单中的字段信息放置在请求体中,适合大数据量的传输,
如:向服务器端上传文件等。

注意:
1) 若直接在地址栏中输入URL按回车,按GET方式提交.
2) 若属性method不指定任何值或者不加属性method默认按GET方式提交.
3) 只有在method指定为POST时才按POST方式提交
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式