在Is HTTP 303 acceptable for other HTTP methods?中,我们确定HTTP 303可以用于其他HTTP方法。
Post/Redirect/Get模式要求服务器在返回HTTP 303
之前执行操作。对于此类和其他类型的重定向,HTTP PUT
和DELETE
是否也是如此? 服务器是否需要在重定向之前执行操作?或者它是否可以假设客户端会根据需要在规范URL上重复请求?
当您考虑重定向通常用于负载平衡时,这会变得更加有趣。
答案 0 :(得分:0)
引用RESTful Web Services第378页:
303(“见其他”)
请求已处理,但不是服务器发送响应文档, 它正在向客户端发送响应文档的URI。这可能是静态的URI 状态消息,或者一些更有趣的资源的URI。
几页后......
307(“临时重定向”)
请求尚未处理,因为请求的资源不在家:它是 位于其他URI。客户端应该将请求重新提交给另一个URI。 对于
GET
请求,其中唯一要求的是服务器发送表示,此状态代码是相同的to 303 (“See Other”)
。307
对GET
的良好响应的典型情况是服务器要将客户端发送到镜像站点。但对于POST, PUT, and DELETE
请求,预计服务器需要一些 响应请求的操作,此状态代码与303
显着不同。 响应303
的{{1}}表示操作已成功 但是响应实体主体没有与此请求一起发送。如果是客户 想要响应实体 - 体,它需要向另一个URI发出POST, PUT, or DELETE
请求。 响应GET
的{{1}}表示服务器甚至没有尝试过 执行操作。客户端需要将整个请求重新提交给URI307
标题。类比可能有所帮助。你带着处方去药店。
POST, PUT, or DELETE
是。{ 药剂师说:“我们已经填写了你的处方。转到下一个窗口进行选择 你的药。“Location
是药剂师说”我们不能填写那个处方。走 到隔壁的药房。“