服务器是否必须在重定向之前执行操作?

时间:2012-12-06 21:24:34

标签: http-status-codes http-redirect http-status-code-307 http-status-code-303

Is HTTP 303 acceptable for other HTTP methods?中,我们确定HTTP 303可以用于其他HTTP方法。

Post/Redirect/Get模式要求服务器在返回HTTP 303之前执行操作。对于此类和其他类型的重定向,HTTP PUTDELETE是否也是如此? 服务器是否需要在重定向之前执行操作?或者它是否可以假设客户端会根据需要在规范URL上重复请求?

当您考虑重定向通常用于负载平衡时,这会变得更加有趣。

1 个答案:

答案 0 :(得分:0)

引用RESTful Web Services第378页:

  

303(“见其他”)

     

请求已处理,但不是服务器发送响应文档,   它正在向客户端发送响应文档的URI。这可能是静态的URI   状态消息,或者一些更有趣的资源的URI。

几页后......

  

307(“临时重定向”)

     

请求尚未处理,因为请求的资源不在家:它是   位于其他URI。客户端应该将请求重新提交给另一个URI。   对于GET请求,其中唯一要求的是服务器发送表示,此状态代码是相同的to 303 (“See Other”) 307GET的良好响应的典型情况是服务器要将客户端发送到镜像站点。但对于POST, PUT, and DELETE请求,预计服务器需要一些   响应请求的操作,此状态代码与303显着不同。   响应303的{​​{1}}表示操作已成功   但是响应实体主体没有与此请求一起发送。如果是客户   想要响应实体 - 体,它需要向另一个URI发出POST, PUT, or DELETE请求。   响应GET的{​​{1}}表示服务器甚至没有尝试过   执行操作。客户端需要将整个请求重新提交给URI   307标题。

     

类比可能有所帮助。你带着处方去药店。 POST, PUT, or DELETE是。{   药剂师说:“我们已经填写了你的处方。转到下一个窗口进行选择   你的药。“Location是药剂师说”我们不能填写那个处方。走   到隔壁的药房。“