据我所知,有三种类型:

不要使用GET和POST 不要使用POST而使用GET 你用哪一个都不重要。

我对这三种情况的假设正确吗?如果有,每个案例都有哪些例子?


当前回答

因为get是纯粹的url,它们可以被web浏览器缓存,并且可能更好地用于一致生成的图像之类的事情。(设置过期时间)

一个来自gravatar页面的例子:http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid

GET可能会产生稍微更好的性能,一些web服务器在调用处理程序之前将POST内容写入临时文件。

另一件需要考虑的事情是尺寸限制。get的上限是URL的大小,标准是1024字节,不过浏览器可能支持更多。

传输更多的数据应该使用POST来获得更好的浏览器兼容性。

即使小于这个限制也是一个问题,正如另一个帖子所写的,URL中的任何内容都可能最终出现在浏览器UI的其他部分,比如历史记录。

其他回答

在短暂的

使用GET来获得安全的和无效的请求 对于既不安全也不幂等的请求使用POST


在细节 每个人都有一个合适的位置。即使您不遵循RESTful原则,通过学习REST以及面向资源的方法是如何工作的,也可以获得很多东西。

RESTful应用程序将对安全且幂等的操作使用get。

安全操作是不改变请求数据的操作。

幂等运算是一种无论你请求多少次结果都相同的运算。

有理由认为,由于get用于安全操作,它们自动也是幂等的。通常,GET用于检索资源(例如,堆栈溢出时的问题及其相关答案)或资源集合。

RESTful应用程序将使用put进行不安全但幂等的操作。

我知道这个问题是关于GET和POST的,但是我马上回到POST。

通常,PUT用于编辑资源(例如,在堆栈溢出上编辑问题或答案)。

POST可以用于任何既不安全也不幂等的操作。

通常,POST将用于创建一个新资源,例如创建一个new SO问题(尽管在某些设计中,PUT也会用于此)。

如果你运行POST两次,你最终会创建两个新的问题。

还有一个DELETE操作,但我猜我可以把它留在那里:)

讨论

实际上,现代网络浏览器通常只可靠地支持GET和POST(你可以通过javascript调用来执行所有这些操作,但是在表单中输入数据和按提交,你通常有两个选项)。在RESTful应用程序中,POST通常也会被覆盖以提供PUT和DELETE调用。

但是,即使您没有遵循RESTful原则,也可以考虑使用GET来检索/查看信息,使用POST来创建/编辑信息。

永远不要对改变数据的操作使用GET。如果搜索引擎抓取到你邪恶行动的链接,或者客户书签,这可能会带来大麻烦。

因为get是纯粹的url,它们可以被web浏览器缓存,并且可能更好地用于一致生成的图像之类的事情。(设置过期时间)

一个来自gravatar页面的例子:http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid

GET可能会产生稍微更好的性能,一些web服务器在调用处理程序之前将POST内容写入临时文件。

另一件需要考虑的事情是尺寸限制。get的上限是URL的大小,标准是1024字节,不过浏览器可能支持更多。

传输更多的数据应该使用POST来获得更好的浏览器兼容性。

即使小于这个限制也是一个问题,正如另一个帖子所写的,URL中的任何内容都可能最终出现在浏览器UI的其他部分,比如历史记录。

使用POST进行破坏性操作,例如创建(我知道这很讽刺)、编辑和删除,因为您不能在浏览器的地址栏中点击POST操作。当允许一个人调用一个动作是安全的时候使用GET。URL是这样的:

http://myblog.org/admin/posts/delete/357

应该带你到一个确认页面,而不是简单地删除项目。这样避免事故要容易得多。

POST也比GET更安全,因为您没有将信息粘贴到URL中。因此,使用GET作为收集密码或其他敏感信息的HTML表单的方法并不是最好的主意。

最后一点注意:POST可以比GET传输更多的信息。“POST”没有传输数据的大小限制,而“GET”限制为2048个字符。

当我不希望人们看到QueryString或当QueryString变大时,我使用POST。另外,文件上传需要POST。

不过,我不认为使用GET有问题,我将它用于简单的事情,其中将内容保留在QueryString上是有意义的。

使用GET将允许链接到POST无法工作的特定页面。

Gorgapor, mod_rewrite仍然经常使用GET。它只是允许将一个更友好的URL转换为一个带有GET查询字符串的URL。