缓存在POST和GET中意味着什么

时间:2014-11-19 15:36:07

标签: java http servlets post get

我已经看到POST和GET之间的主要区别之一是POST没有被缓存但是GET被缓存了。

你能解释一下你对“缓存”的意思吗?

另外,如果我使用POST或GET服务器发送给我回复。有什么区别吗?在所有情况下,我都有请求数据和响应,不是吗?

由于

3 个答案:

答案 0 :(得分:1)

GET和POST方法背后的基本思想是GET消息只检索信息,但从不更改服务器的状态。 (由此得名)。因此,几乎任何缓存系统都会假设您可以记住返回的最后一个GET响应,并且下一个将看起来相同。

另一方面,POST是一个向服务器发送新信息的请求。因此,不仅可以缓存这些(因为没有保证,下一个POST不会修改更多内容;例如,像按钮一样认为+1)但是它们实际上必须使部分缓存无效,因为它们可能会修改页面。 / p>

因此,例如,当您尝试刷新发布信息的页面时,您的浏览器会发出警告,因为您可能会通过这样做进行更改。当GET一个页面时,它不会这样做,因为你不能通过这样做改变网站上的任何内容。

(或者更确切地说,这是你作为程序员的工作,以确保在获取页面时没有任何变化。)

答案 1 :(得分:1)

缓存(在HTTP的上下文中)意味着在客户端或某个中间主机上存储页面/响应 - 可能在内容分发网络中。当客户端请求页面时,可以从客户端的高速缓存(如果客户端之前请求它)或中间主机提供页面。这比从生成页面的服务器获取页面要快,并且所需资源更少。

一个缺点是,如果请求更改了服务器上的某些状态,那么如果页面是从缓存提供的,那么该更改将不会发生。这就是为什么POST请求通常不会从缓存中提供的。

缓存的另一个缺点是缓存的副本可能已过期。 HTTP缓存机制试图阻止这种情况。

答案 2 :(得分:0)

GET应该从服务器返回相同的结果,而不是在服务器端改变事物,因此是幂等的。

而POST意味着它可以在服务器上修改某些东西(在db中创建一个条目,删除一些东西等),因此不是幂等的。

关于缓存,GET中的数据已经以一种很好的方式解决了。

  

http://www.ebaytechblog.com/2012/08/20/caching-http-post-requests-and-responses/#.VGy9ovmUeeQ