山高岳小,水落石出

blog重建工作基本完成

导航

Blog统计

公告

1.关注java,关注web开发,关注互联网,关注企业信息化

2.关注实时绘制技术,关注光照技术,关注阴影技术

3.关注投资理财,关注企业管理,关注创业项目









文章

收藏

相册

my blog

存档


正在读取评论……

作了很长时间的web开发,似乎是学到很多东西,也能编出一些东西出来,但是最近才觉得学无止境,光是做不思考不总结不学习是不行的。

今天就碰到了post和get方式有怎样不同的问题,下面是我收集的一些解释: 

 

GET与POST的区别在于:(对于CGI

如果以GET方式传输,所带参数附加在CGI程式的URL后直接传给server,并可从server端的QUERY_STRING这个环境变量中读取;

如果以POST方式传输,则参数会被打包在数据报中传送给server,并可从CONTENT_LENGTH这个环境变量中读取出来。

还有一种情况是,你用的是GET方式,但传送的参数是路径,如:

----< ahref="/cgi-bin/a.pl/usr/local/bin/pine" >CGI< /a >

----这时所传递的参数"/usr/local/bin/pine"存放在PATH_INFO这个环境变量中。环境变量的读取方式为$str=$ENV{'QUERY_STRING'};

 

理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(query string)加到一个URL上,值和表单是一一对应的。比如说,name=John。在队列里,值和表单用一个&符号分开,空格用+号替换,特殊的符号转换成十六进制的代码。因为这一队列在URL里边,这样队列的参数就能看得到,可以被记录下来,或更改。通常GET方法还限制字符的大小。事实上POST方法可以没有时间限制的传递数据到服务器,用户在浏览器端是看不到这一过程的,所以POST方法比较适合用于发送一个保密的(比如信用卡号)或者比较大量的数据到服务器。

Post是允许传输大量数据的方法,而Get方法会将所要传输的数据附在网址后面,然后一起送达服务器,因此传送的数据量就会受到限制,但是执行效率却比Post方法好。

 

 

对于GET提交的数据,WWW服务器将把数据放在环境变量QUERY_STRING中;对于POST方法,数据被送到WWW服务器的STDOUT中,然后CGI从自己的STDIN中读取。使用传统的CGI方法,用户必须自己编程来处理这些数据。

 

 

GET与POST的区别在于,如果以GET方式传输,所带参数附加在CGI程式的URL后直接传给server,并可从server端的QUERY_STRING这个环境变量中读取;如果以POST方式传输,则参数会被打包在数据报中传送给server,并可从CONTENT_LENGTH这个环境变量中读取出来。还有一种情况是,你用的是GET方式,但传送的参数是路径,如:

----< ahref="/cgi-bin/a.pl/usr/local/bin/pine" >CGI< /a >

----这时所传递的参数"/usr/local/bin/pine"存放在PATH_INFO这个环境变量中。环境变量的读取方式为$str=$ENV{'QUERY_STRING'};

总结起来:

get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在servlet/jsp中就无法处理发挥java的比如vector之类的功能);

post方式:就传输方式讲参数会被打包在数据报中传输,从CONTENT_LENGTH这个环境变量中读取,便于传送较大一些的数据,同时因为不暴露数据在浏览器的地址栏中,安全性相对较高,但这样的处理效率会受到影响。

 

 

-------------------

9月25日

今天又看到一篇文章来解释这个问题:

版权声明:CSDN是本Blog托管服务提供商。如本文牵涉版权问题,CSDN不承担相关责任,请版权拥有者直接与文章作者联系解决。


关于你上次提到的问题:
// --TCP/IP 协议详解卷3
13.3.1 报文类型:请求与响应
HTTP / 1 . 0报文有两种类型:请求和响应。HTTP / 1 . 0请求的格式是:
reqe t - l i n e
headers ( 0或有多个)
<blank line>
body (只对POST请求有效)

request - l i n e的格式是:
request request-URI HTTP版本号

支持以下三种请求:
1) G E T请求,返回re q u e s t - U R I所指出的任意信息。
2) H E A D请求,类似于G E T请求,但服务器程序只返回指定文档的首部信息,而不包含实际的文档内容。该请求通常被用来测试超文本链接的正确性、可访问性和最近的修改。
3) P O S T请求用来发送电子邮件、新闻或发送能由交互用户填写的表格。这是唯一需要在请求中发送b o d y的请求。使用P O S T请求时需要在报文首部C o n t e n t - L e n g t h字段中
指出b o d y的长度。
// --TCP/IP 协议详解卷3


明白?get 请求表示客户端请求一个uri,服务器返回客户端请求的uri,post请求表示客户端请求的时候还要提交数据,比喻提交form表单,要提交的数据会放到请求报文的body部分。服务器收到后这样的请求后通常需要来处理这些数据。
应聘j2ee开发时问这个问题说明提问着的重点是服务器对这两种请求的处理有什么不同,而不是这两种请求的报文有什么不同。当然作为一个jsp servlet的开发者一般你是不会感觉到着两种请求有什么不同的,因为web服务器已经对这些请求进行处理了,web服务器调用相应的 jsp/servlet来响应客户端请求的时候,对于post的请求,web服务器已经把客户端提交的数据取出来,添到request对象中去了。不过,对于get、post的请求servlet 的 doGet、 doPost方法会被响应调用。也就是说如果客户端送来的是一个get的请求,那么你写到servlet中的dopost()方法中的代码是不会执行的,反之如果是post的请求,写在doget()中代码是不会被调用的(对于所有方式的请求,写在doservice的代码是会被调用的,因为在HttpServlet类中doGet doPost的请求都是由doService来分发的,具体的看关于servlet的生命周期介绍)。



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=51296


[点击此处收藏本文]  发表于2004年07月26日 10:58 PM




正在读取评论……
大名
网址
验证码
评论