Http响应303是否暗示需要客户端重定向?

时间:2018-11-12 14:47:40

标签: http redirect api-design

我正在实现一个API,试图坚持一个Restful设计。我们有一个用例来接受POST请求,创建资源并将URL返回给客户端。客户端将希望应用一些业务逻辑来确定是否应从该URL检索资源。在我看来,按照RFC 7231的规定,返回码应该是303:

  

用户代理可以执行针对该URI(如果使用HTTP,则为GET或HEAD请求)的检索请求,该请求也可能会被重定向,并显示最终结果作为对原始请求的答案

但是,同事不同意并提出200响应,因为不应该要求客户端遵循重定向来获取资源-这取决于他们。 RFC声明

  

如果提供了位置标头字段(第7.1.2节),则      用户代理可以自动将其请求重定向到URI      即使特定状态也由“位置”字段值引用      代码不被理解。自动重定向需要完成      注意4.2.1节中定义的不安全的方法,      因为用户可能不希望重定向不安全的请求

我读这句话是说重定向响应将决定是否重定向到客户端。我的同事认为,由于浏览器和客户端会自动重定向,因此我们不应指示他们这样做。这是正确的吗?

1 个答案:

答案 0 :(得分:1)

REST API的常规约定是在POST之后不重定向,因此API无需使用PRG模式。

HTTP状态代码应该反映已完成的操作(200,201,202等),而不是重定向状态代码,因为这对API的使用者更友好。

浏览器确实确实follow redirects,所以通过进行重定向,您将更难从浏览器使用API​​-他们无法决定不遵循重定向。