那么我们为什么要使用POST而不是GET来发布数据呢?

时间:2009-08-10 10:24:24

标签: http post

  

可能重复:
  How should I choose between GET and POST methods in HTML forms?
  When do you use POST and when do you use GET?

显然,你应该。但除了这样做以实现HTTP协议之外,还有什么理由这样做吗?开销减少了?某种安全的东西?

8 个答案:

答案 0 :(得分:14)

因为GET不能按照定义改变服务器的状态。

请参阅RFC2616 9.1.1 Safe Methods

  

9.1.1安全方法

     

执行者应该意识到这一点   软件代表他们的用户   互联网上的互动,和   应该小心允许用户   注意他们可能采取的任何行动   拿出可能出乎意料的   对自己或他人的意义。

     

特别是,惯例已经   建立了GET和HEAD   方法不应该有   采取行动的重要性   而不是检索。这些方法应该   被认为是“安全的”。这允许用户   代理人代表其他方法,   例如POST,PUT和DELETE,在   特殊的方式,使用户成为   意识到可能的事实   正在要求采取不安全行动。

如果您使用GET更改服务器的状态,那么搜索引擎机器人或网络浏览器中的某个链接预取扩展程序可能会对您的网站造成严重破坏(例如)delete all user data just by following links to your site

答案 1 :(得分:8)

W3C有一篇很好的论文: URIs, Addressability, and the use of HTTP GET and POST

  

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

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

答案 2 :(得分:6)

因为,如果您使用GET来改变状态,Google can delete your stuff

答案 3 :(得分:4)

答案 4 :(得分:2)

如果您接受GET执行写入操作,则恶意黑客可能会注入某些链接以执行未经授权的操作。您的用户单击链接 - 并从数据库中删除某些内容。或者,如果他仍然登录到他们的网上银行,可能会从用户的帐户转移一些金额。

http://superbank.com/TransferMoney?amount=1000&recipient=2342524

发送带有嵌入图片的恶意电子邮件,引用此链接,文档打开后,幕后发生了一些有趣的事情。

答案 5 :(得分:0)

GET受浏览器/服务器可以处理的URL长度的限制。这曾经短至256个字符。

答案 6 :(得分:0)

至少有一种情况是您希望GET更改服务器上的数据。那就是当GET返回数据时,你需要记录给用户的数据以及给出的时间。

如果您使用复杂的数据类型,那么它必须在POST中,它不能在GET中。例如,只有在合同使用简单数据类型时才能在浏览器中测试WCF Web服务。

在预期的地方使用GET和POST有助于保持程序的可理解性。

答案 7 :(得分:-5)

使用POST时,您可以在Web浏览器的地址栏中看到“已发布”的信息。当你使用GET方法时,显然不是这种情况。

这篇文章就在http://www.w3schools.com/的某个地方。一旦我找到它所在的确切页面,我就会重新发布。 : - )