什么时候使用GET方法是合理的?

时间:2011-01-30 16:21:14

标签: php html http

当使用GET方法合理时?可以一直使用POST吗? GET是否快速转移到POST后是对的吗?

5 个答案:

答案 0 :(得分:11)

GET动词用于idempotent的请求,例如当它们导致相同的结果时(并且对返回的资源没有可观察到的副作用)。因此,您只能使用它们来检索资源。

  

GET方法意味着检索由Request-URI标识的任何信息(以实体的形式)。如果Request-URI引用数据生成过程,则生成的数据应作为响应中的实体而不是过程的源文本返回,除非该文本恰好是过程的输出。

以及

  

1.3选择HTTP GET或POST的快速核对表

     
      
  • 使用GET如果:   
        
    • 交互更像是一个问题(即,它是一种安全的操作,例如查询,读取操作或查找)。
    •   
  •   
  • 使用POST如果:   
        
    • 互动更像是订单,或
    •   
    • 交互以用户会感知的方式(例如,订阅服务)更改资源的状态,或
    •   
    • 用户要对交互结果负责。
    •   
  •   
     

但是,在最终决定使用HTTP GET或POST之前,请考虑敏感数据和实际考虑因素。

第二个链接很好地解释了差异。

请注意,HTTP协议中不仅有GET和POST,还有其他一些动词,如PUT,HEAD,DELETE等。那些在RESTful applications中发挥了重要作用。

答案 1 :(得分:4)

简答:

当用户能够为请求添加书签,共享请求以及一遍又一遍地返回时,请使用GET个请求。例如,能够为Google查询的结果添加书签是有意义的。

更长的回答:

当用户只是提取/查看资源时使用GET请求,并且对您网站的数据或将来的请求没有任何重大的副作用。如果请求正在创建,修改或删除某些内容,则该请求应为POST。如果用户登录的网站会对未来的请求产生影响,那么它应该是POST,而不是GET

注意:用户仍然可以更改POST变量。

用户更容易更改查询字符串(GET)值,但用户更改POST值并不困难。您的网站的安全性应考虑到这一点!使用POST来保证安全性并不是一个正当理由,除了POST变量不是URL的一部分并且没有加入书签这一事实,而GET变量是。{{1}}变量。这可以防止用户在共享链接时意外地共享密码等内容。

答案 2 :(得分:2)

对于应该能够被加入书签的内容以及具有少量短参数的简单查询,GET更好。

对于用户不应该看到的敏感字段,大型二进制传输以及具有许多字段或非常长字段的传输,POST更好。

答案 3 :(得分:2)

您可以使用发布大量数据或您不希望在网址中显示的数据。例如,您不希望网址删除某个页面或创建一个页面以显示在某个人的历史记录中。您也不想以这种方式保存密码。

对于搜索字符串等,您可以轻松使用get。它允许用户复制特定的URL,如特定的搜索结果,或链接到分页列表中的第5页。

所以,两者都可以用于他们自己的目的。您唯一应该记住的是网址的最大大小为8Kb,包括获取参数。

答案 4 :(得分:1)

通常情况下,GET是搜索页面的首选(例如google),而且不应该在网址中显示像用户名或密码这样不敏感的内容。

考虑安全性:

使用GET时,你应该非常有选择性,例如你最终编码如下:

$page = $_GET['page'];
include $page . '.php';

坏人可以访问以下网址:

http://www.yourdomain.com?page=../../../etc.pwd

或者如果你这样做:

$id = $_GET['id'];
mysql_query('delete from table where id = $id');

坏人只需访问:

就可以从db中删除所有记录
http://www.yourdomain.com?id=5
http://www.yourdomain.com?id=10

对这些错误确实存在解决方案,但在POSTGET之间进行选择时,您仍然应该有选择性。