目前正在阅读Bloch的 Effective Java (第2版),并指出以粗体显示在Web应用程序中过度使用POST本质上是不好的。不幸的是,他没有说明原因。
这令我吃了一惊,因为当我进行任何Web开发时,我所使用的都是POST!出于安全考虑,我总是避开GET,因为它感觉更专业(长,不雅观的URL总是因为某些原因而烦恼)。
GET和POST之间是否存在性能差异?任何人都可以详细说明为什么过度使用POST是坏的,为什么?我的理解 - 和初步搜索 - 似乎都表明这两个处理程序非常类似于Web服务器。提前谢谢!
答案 0 :(得分:4)
您应该使用HTTP,因为它应该被使用。
GET应该用于幂等,读取查询(即查看项目,搜索产品等)。
POST应该用于创建,删除或更新请求(即删除项目,更新个人资料等)。
GET允许刷新页面,为其添加书签,将URL发送给某人。 POST不允许这样做。一个有用的模式是post/redirect/get(发布后的AKA重定向)。
请注意,除了长搜索表单外,GET URL应该很短。它们通常应该看起来像http://www.foo.com/app/product/view?productId=1245,甚至http://www.foo.com/app/product/view/1245
答案 1 :(得分:2)
在请求内容时,几乎总是使用GET
。只有在以下情况下才使用POST
:
POST
进行更改,PUT
添加和DELETE
删除。) 区别在于:如果您想将页面链接提供给朋友,或将其保存在某处,甚至只将其添加到您的书签, 需要页面的完整网址。就像您的地址栏目前应该说http://stackoverflow.com/questions/7810876/abusing-http-post
一样。你可以用Ctrl-C那个。你可以保存它。再次输入该链接,您将返回此页面。
现在当您使用GET
以外的任何操作时,根本就没有要复制的网址。就像您的浏览器会说您在http://stackoverflow.com/question
。你不能复制它。你不能加入书签。此外,如果您尝试重新加载此页面,您的浏览器会询问您是否要再次发送数据,这对您网页的非技术用户来说相当混乱。并且为整个休息而烦恼。
但是,在传输数据时应使用POST
/ PUT
。网址只能这么长。您无法在网址中传输整篇博文。此外,如果您重新加载此类页面,您几乎肯定会发布双重帖子,因为上述消息不会出现。
GET
和POST
非常不同。选择合适的工作。
答案 2 :(得分:1)
如果出于安全原因使用POST,我可能会在这里提及其他安全因素。即使您使用POST,也需要确保以加密形式从表单提交中发送数据。
至于GET和POST之间的区别,就像使用GET发送GET请求一样简单。因此,您希望从页面获取数据并对其进行操作,这就是所有内容的结束。
另一方面,POST用于将POST数据发送到应用程序。我在这里讨论交易(完成创建,更新或删除操作)。如果您有一个敏感的应用程序,它会删除用户,比如ID和ID。你不会想要使用GET,因为在这种情况下,一个机智的用户可能会引起混乱只是改变URL末尾的ID并删除所有随机使用。
POST允许更多数据,并且可以被黑客攻击以发送文件流。 GET虽然规模有限。
使用GET或POST几乎没有任何权衡。