免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1306 | 回复: 0
打印 上一主题 下一主题

get post [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-11 15:53 |只看该作者 |倒序浏览
在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的。Form提供了两种数据传输的方式——get和post。虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响。虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的。
Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用 “&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。
3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。
5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
6、Get是Form的默认方法。



原文

1、Get 方法通过 URL 请求来传递用户的数据,将表单内各字段名称与其内容,以成对的字符串连接,置于 action 属性所指程序的 url 后,如http://www.dophp.com/test.php?name=do&password=php,数据都会直接显示在 url 上,就像用户点击一个链接一样;Post 方法通过 HTTP post 机制,将表单内各字段名称与其内容放置在 HTML 表头(header)内一起传送给服务器端交由 action 属性能所指的程序处理,该程序会通过标准输入(stdin)方式,将表单的数据读出并加以处理
2、 Get 方式;而get 方式通过 $_get['']来访问提交的内容
3、Get 方式传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比 Post 方法好;
4、Get 方式提交数据,会带来安全问题,比如一个登陆页面,通过 Get 方式提交数据时,用户名和密码将出现在 URL 上.
如果页面可以被缓存或者其他人可以访问客户这台机器,就可以从历史记录获得该用户的帐号和密码,所以表单提交建议使用 Post 方法;Post 方法提交的表单页面常见的问题是,该页面如果刷新的时候,会弹出一个对话框

PHP $_POST变量的作用是:获取method = “post”方法发送的表单变量。
$_POST变量
$_POST变量是一个包含名称[name]何值[value]的组(这些名称和值是通过HTTP POST方法发送的,且都可以利用)
$_POST变量使用“method=POST”来获取表单信息。通过POST方法发送的信息是不可见的,并且它没有关于信息长度的限制。
案例
Enter your name:

当用户点击“提交Submit”按钮后,URL中不会包含任何表单数据
“welcome.php”文件可以使用“$_POST”变量来获取表单数据(注意:表单栏[form field]内的名称将会自动作为“$_POST”数组中的ID关键词):
Welcome
Come on dophp
为什么要使用$_POST?
通过HTTP POST发送的变量不会在URL中显示出来
变量的大小没有限制
然而,因为变量不能在URL中显示出来,所以也不可能把这个页面作为标签储存在收藏夹里。



我来简单补充一下,get方式是有长度限制的,还有post方式的提交后的刷洗会重复提交的问题!
我给个思路:当你处理提交数据成功以后,可以加一个页面的跳转,就跳转本页面就可以,比如本页是index页面当你提交成功以后,就可以加一个l ...
quote
有时浏览器禁用了js就不好用了,我是这样的
echo "refresh\" content=\"3;URL=xxx.php\">container\" style=\"margin:40px; padding:40px;text-align:center; font-size:12px; border:#0099FF double;\">提示信息!";
如果不要提示直接跳转就这样
echo "";
lol 不用担心禁用的js,也不用担心用header会警告。完美:victory:
后面加个exit();就更完美了。好像扯远了




post和get方式区别导致的问题
DisplayTag、Tomcat中编码的问题
这2个月一直被DisplayTag折腾,如果DisplayTag的链接或者排序的列中有汉字,那么排序或者翻页都会查询不到结果或报错(如果你处理的好,可能会显示没有可以显示的数据)。
我一直以为这个问题是因为DisplayTag的开发者们没有考虑到中文的问题,因为项目进度很紧,所以就把排序的功能给屏蔽了,虽然经过了大量的测试,但都没有发现翻页时候也存在这个问题(AppFuse自动生成的页面的默认显示25行,如果超过25行会自动分页),直到前天,测试人员才发现这个问题,按照我的理解要修改DisplayTag的源码,后来又想通过自己写过滤器试试,幸运的是在我动手干之前,先和倦兔聊了几句,结果倦兔说他也遇到过这个问题,指出如果在server.xml中添加URIEncoding="GBK"就可以解决问题,我试了一下,果然可以,但这是为什么呢?
在AppFuse中有一个Spring的过滤器,对请求的编码进行转换,这种做法很通用,即使是在以前,我们自己写这个过滤器也不麻烦,而且这个代码在网上随处可见,难道是Spring的过滤器没有起作用吗?也不是,如果没起作用,那么我在Struts中的Action中通过request.getParmeter接收到参数应该是乱码?而且我记得这种做法在Tomcat4.1.24中没有任何问题,那是为什么?和倦兔讨论了一下,我们都没有找到答案。
于是,我就通过google搜索"URIEncoding",找到一堆文章,我读了几篇文章,其中有一篇提到:Tomcat5中对Post和Get请求不再采用相同的处理策略了,而在Tomcat4中采用的处理策略是相同的。于是我想:"我的提交的请求明明是Post,我又没有用Get请求,那Spring的过滤器就应该起作用,为什么结果会这样呢?",我的一个jsp中的Form的代码如下:

看,我的代码明明是使用的是Post方法,为什么结果不正确呢?
我的跳转到下一页的代码是:
下一页
加粗的部分就是我的翻页的链接。如果你立刻就看出了我的问题,那么你就可以不用往下看了,呵呵。如果你没有看出问题,请继续,Come On Baby!!!
我采用的真的是Post方法吗?我的form的提交采用的是Post方法,这是没错的,那么链接采用的是Post方法吗?
不是!!!!它采用的是Get方法进行提交的,饩褪俏侍獾拇鸢噶? Post和Get提交有什么区别吗?
简单的说:Post是将地址传送一次,将form的数据单独提交,而Get则是将地址和参数一起传送,传送的不止是form的数据,但传送的数据的长度有字节限制,另外还有安全问题。如果感兴趣,你可以用google搜一下,会找到很多资料。
当我想到这个区别时,我又检查了一下我的显示列表的页面,发现这个页面没有form,只有,这说明我的提交的确是Get的,于是,Tomcat5对我的Get请求执行的是另外的处理方式,和Post的处理方式不再一样了!
Tomcat5对Get请求是怎么处理的?
默认情况下,Tomcat对请求采用的默认编码是ISO-8859-1,我们的JSP页面上声明的
pageEncoding="GBK"  
contentType="text/html;charset=GBK"--> page language="java" errorPage="/error.jsp"  
  
pageEncoding="GBK" contentType="text/html;charset=GBK"  


只在显示汉字时有用,而且这2种写法的作用在理论上应该时一致的,但是由于各个软件厂商对Web标准都按照自己的理解进行了修改,所以,常常这2种写法作用就不一致了,使我们在开发Web程序时备感混乱。如果你想了解详情,请查看《网站重构》一书。  
这样我们提交的汉字被认为是ISO-8859-1的编码,所以在程序中接收时显示乱码,如果使用过滤器,在过滤器中调用request.setCharacterEncoding("GBK")的话,那么Post上来的汉字将被认为是GBK编码,而Tomcat5对于Get请求上来的编码并不根据过滤器的设定辨认编码方式,默认的依然是ISO-8859-1,Tomcat5中处理Get请求的源代码如下:
上面的代码中,enc代表Tomcat5中server.xml中Connector部分的URIEnocodeing项设定的值,可以看出,如果没有设定URIEncoding项的话,那么Tomcat5也并没有使用默认的ISO-8859-1编码,而是一段fast conversion,所以,即使你的页面使用默认的编码方式进行编码,然后使用ISO-8859-1进行解码,得到的结果也不对,这可能是Tomcat5的一个Bug。如果想绕过这个Bug,那么只有在server.xml的Connector部分设定URIEncoding的值,根据编码方式指定自己的值,在我的程序中我使用的是GBK,所以我修改后的部分如下:
acceptCount="100"
connectionTimeout="20000"
disableUploadTimeout="true"
port="80"
redirectPort="8443"
enableLookups="false"
minSpareThreads="25"
maxSpareThreads="75"
maxThreads="150"
maxPostSize="0"
URIEncoding="GBK">





php中$_request与$_post、$_get的区别
php中有$_request与$_post、$_get用于接受表单数据,当时他们有何种区别,什么时候用那种最好。
一、$_request与$_post、$_get的区别和特点
$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较慢。通过post和get方法提交的所有数据都可以通过$_REQUEST数组获得
二、$_post、$_get的区别和特点
   1. get是从服务器上获取数据,post是向服务器传送数据。
   2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
   3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
   4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
   5. get安全性非常低,post安全性较高。
举例:mypage?id=1这种就是GET方式传值,可以用$_request和$_get接受传值。



简单的php的post,get以及replace
那个小朋友问我,于是我尝试写了下,首先,php下的取传递值跟asp下有的一拼:
获取action的值(不论是POST还是GET方式都可以):
$action = ($HTTP_POST_VARS['action']) ? $HTTP_POST_VARS['action'] : $HTTP_GET_VARS['action'];
可以简写成:
$action = $_POST['action'] ? $_POST['action'] : $_GET['action'];
另外,php下的replace也是很简单的,直接用str_replace函数,replace的东西可以用数组,只要前后一致就ok啦~其实我知道php的替换基本都是正则的,但有时候小的replace易懂~~~
写好后测试了下,正常:

  
  
  
"," ");
$areplace=array("","","|");
$keyword = str_replace($breplace,$areplace,$_POST["q"]);//字符替换
echo "替换后:";  
echo $keyword;
}
?>



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/56605/showart_461696.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP