我正在研究一个POST HTTP API,它不修改或在服务器上创建任何状态。这个API是用POST方法实现的,因为它需要接受多个复杂的输入,而使用查询参数是不可能的。
对于这种只读POST api,如果条件检查失败(If-Match
/If-None-Match
),返回正确的响应状态是什么,应该是304 Not Modified
还是412 Precondition Failed
?
对于GET请求,我们期望有一个if - none - match报头,如果条件成立,它通常会产生一个带有表示的更新副本的200响应,当前提条件失败时(意味着客户端资源副本已经是最新的),它会产生一个304响应。
当以只读方式使用POST时,的语义应该是相同的。(请注意,我们在这里有点边缘情况;一般用途的客户端通常不会知道这个特定的POST请求是安全的,并且可能不知道该将哪个先决条件头附加到请求中。例如,如果您尝试在web浏览器中使用HTML表单来访问此资源,则可能无法获得所需的条件标头。
412 Precondition Failed通常在请求修改资源时使用,与If-Match标头一起使用。
参考:HTTP语义,第13节