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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表单提交中get和post方式的区别相关的知识,希望对你有一定的参考价值。

表单的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不等)。

以上内容为本人原创,百度首发,管理员觉得抄袭请提供拷屏证据。
参考技术A 表单的常用提交方式:
1) GET
浏览器将提交表单中的字段信息放置在请求头中,不适合大数据量的传输,
适合根据关键字作查询。
2) POST
浏览器将提交表单中的字段信息放置在请求体中,适合大数据量的传输,
如:向服务器端上传文件等。

注意:
1) 若直接在地址栏中输入URL按回车,按GET方式提交.
2) 若属性method不指定任何值或者不加属性method默认按GET方式提交.
3) 只有在method指定为POST时才按POST方式提交本回答被提问者和网友采纳

以上是关于表单提交中get和post方式的区别的主要内容,如果未能解决你的问题,请参考以下文章

表单_post提交方式和get的区别,元素集

表单的提交有两种方式:GET和POST,这两种方式的区别是啥?

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

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

php中的表单提交方式get和post有啥区别?

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