`
zljpp
  • 浏览: 255355 次
社区版块
存档分类
最新评论

提交方法:post和get比较

    博客分类:
  • java
阅读更多

    我们知道,从一个页面转向另一个页面的请求方式有两种,那就是:Post和Get. 
    二者有如下的区别: 
    首先:Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 
    其次:Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度限制,只能传递大约1024字节. 
    再次:Post就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。 
    下面就来说说页面之间传值的方法:我们的form表单的method方法,有两个,post,get.它在页面传值的时候的区别也就是上面提到的三点. 

    post方法. 
1.在页面上新建一个form,不要加上runat="server"的标志,当然在这个窗体下的控件也就不用想用Viewstate来传值了.当在其他有runat="server"的窗体的中的按钮事件中,手动调用新建form的submit() 函数. 
传送页面代码如下: 




    Ajax, 选择的是GET还是POST?

  当我们不通过重新加载页面,用Ajax访问服务器的时候,有两个选择可以将请求信息传送到服务器上。这两个选择分别是GET和POST。

  在把请求信息发送到服务器上以加载新的页面时,这两个选择有两个不同之处。第一个区别是你是请求了信息的一小部分而不是整个页面。第二个区别也是最明显的区别是由于Ajax请求不会出现在地址栏中,因此当发送请求时,在访问者的屏幕上是看不出什么异同的。使用GET生成调用不会暴露域和它们的值,使用POST也不会暴露。因此,我们要怎样在这两者之间作出选择呢?

  初学者可能犯的一个错误是对于大多数的调用都使用GET命令,仅仅因为这一命令相对而言更容易编写。GET与POST调用之间最显著的差异是当发出加载新页面请求时,GET调用对于同样数量的数据有着相同的限制。唯一的区别是你处理的少量的Ajax请求数据,而你并不想通过这种长度运行的限制来完成页面的加载。初学者可能会在少数情况下,如他们确实需要传送更多信息时,使用POST。

  当我们有大量数据要传送时最好的办法是一次发出多个只传递少量信息的Ajax调用时。如果你正用一个Ajax调用发送大量数据,那么最好是结束这种做法,因为这样做并不能节约时间。

  因此,需要传送大量数据能成为我们在GET和POST之间犹豫不决的理由吗?这两个方法都是为不同的目的而设计的,两者的不同也在于其使用目的。这一说法不仅适用于GET和POST的使用,也适用于其他的方法。

  GET的目的就如同其名字一样是用于获取信息的。它旨在显示出页面上你要阅读的信息。浏览器会缓冲GET请求的执行结果,如果同样的GET请求再次发出,浏览器就会显示缓冲的结果而不是重新运行整个请求。这一流程不同于浏览器的处理过程,但是它是有意设计成这样以使GET调用更有效率。GET调用会检索要显示在页面中的数据,数据不会在服务器上被更改,因此重新请求相同数据的时候会得到相同的结果。

  POST方法应该用于你需要更新服务器信息的地方。如某调用要更改保存在服务器上的数据,而从两个同样的POST调用返回的结果或许会完全不同,因为第二个POST调用的值与第一个的值不相同,这是由于第一个调用已经更新了其中一些值。POST调用通常会从服务器上获取响应而不是保持前一个响应的缓冲。

  因此,不要用数据的量来决定是要选择GET还是POST,而应该按照目的在两者间作出选择。如果调用是要检索服务器上的数据则使用GET。如果要检索的值会随时间和更新进程的改变而改变则要在GET调用中添加一个当前时间参数,这样后面的调用才不会使用先前的不正确的缓冲。如果调用是向服务器上发送任意数据,就可以使用POST。

  事实上,我们不应该不仅仅只将这个标准作为选择怎样使用GET和POST调用的标准,在处理页面处理形式的时候也可以将它作为取舍这两个调用的标准。

21
6
分享到:
评论
13 楼 owenludong 2012-06-11  
分析的太彻底了。一直不知道GET请求会缓存请求结果。
12 楼 wuhoufeng 2012-06-11  
楼才是正解
11 楼 wuhoufeng 2012-06-11  
其实这个大小是和具体实现相关的协议里没限制这个
10 楼 qiaoshaohua15 2012-06-11  
蒹葭从风 写道
用ajax的get请求时,在IE上会有缓存,有时会出现不是自己想要的结果。

加上时间戳就不会缓存
9 楼 蒹葭从风 2012-06-11  
用ajax的get请求时,在IE上会有缓存,有时会出现不是自己想要的结果。
8 楼 satanultra 2012-06-11  
怎么读起来那么拗口,跟机器翻译的英文文章似的。
7 楼 happysoul 2012-06-11  
这文章确实毁人不倦啊。。。而且还是在首页
如果像你说的post就2m的话,那么视频网站什么的就别活了,包括邮件的附件上传
6 楼 kjj 2012-06-11  
其次:Post传输的数据量大,可以达到2M,


试试传个2.00000000000001m的文件能不能成功!!
5 楼 sunzhiqiang1984 2012-06-11  
原创不错,但文章有硬伤。快把1、2、3的问题回复下吧。
4 楼 dieslrae 2012-06-11  
delete和put你怎么不说
3 楼 skylvyou 2012-06-11  
 当我们有大量数据要传送时最好的办法是一次发出多个只传递少量信息的Ajax调用时。
这句话我还真没看懂...
2 楼 paohui02 2012-06-11  
Post和Get方法传输的数据大小,由客户端浏览器和WEB服务端 决定的。。。。。
1 楼 zjfcyefeng 2012-06-11  
其次:Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度限制,只能传递大约1024字节.
???????

相关推荐

Global site tag (gtag.js) - Google Analytics