REST体系结构中如何缓存POST请求



内部:https://en.wikipedia.org/wiki/Representational_state_transfer

有一句话让我感到疑惑:"GET和POST方法是可缓存的,这意味着可以存储对它们的响应以备将来重用">

缓存使用GET获取的内容似乎是显而易见的,因为它获取的是静态文档。

但是,如果每个POST请求看起来都不一样,那么缓存POST请求又有什么意义呢?有哪些用例是有意义的?

IANA方法注册表当前列出ietf httpbis语义草案#section-9.3.3作为POST:的权威参考

POST请求的响应只有在包含明确的新鲜度信息(请参见[CACHING]的第4.2.1节(和与POST目标URI具有相同值的Content-Location头字段(第8.7节(时才可缓存。缓存的POST响应可以重复使用以满足稍后的GET或HEAD请求,但不能满足POST请求,因为POST是不安全的,所以需要写入到原始服务器;参见【CACHING】第4节。

以这种方式使用Content-Location标头可以指示响应的有效负载是目标资源的表示,而不是操作的任何任意状态。


这有什么意义的用例?

POST用于修改目标资源的任何时间

GET /the-car
200 OK
Content-Type: application/json
{ "color" : "red" }
POST /the-car
Content-Type: text/plain
Bob, the car should be blue, can you fix that please?
200 OK
Content-Type: application/json
Content-Location: /the-car
{ "color" : "blue" }

最新更新