2009-08-04 106 views
28

按照HTTP规范:是否允许HTTP POST请求发回响应主体?

如果资源已经在 源服务器上创建的,则响应应该 是201(创建)和包含其描述了 请求的状态,并且是指一个实体 到新的 资源和位置标题 (请参阅第14.30节)。

这是否意味着POST请求应始终在没有响应正文的位置标头中发送重定向URI?

回答

25

指定响应主体同时使用位置标头是完全可以接受的。当使用带有201响应的位置标题时,您不重定向客户端,您只是告诉它将来可以找到资源的位置。

重定向仅适用于3xx响应。

W3C docs for this进一步解释,虽然文本实际上是相当含糊:

位置响应报头字段用于收件人比的Request-URI以外的位置重定向请求的完成或识别新资源。对于201(已创建)响应,该位置是由请求创建的新资源的位置。对于3xx响应,位置应该指出服务器首选的URI,以便自动重定向到资源。

我读到“...重定向...或...识别[y] ...新资源”,但它不完全是一个普通的英语句子。

+6

答案是?它是“单词,否”或“你可以指定一个响应主体并同时使用位置标题”? – 2009-08-04 13:38:54

12

基于paragraph 9.5 of the HTTP 1.1 specification,这对于这样的问题的参考,这是我的理解:

当然可以,而且规格是清楚的,你可以做什么和怎么做:

POST方法执行的操作可能不会导致可以通过URI标识的资源。在这种情况下,根据响应是否包含描述结果的实体,200(OK)或204(无内容)是适当的响应状态。

如果在原始服务器上创建了一个资源,那么回应应该是201(Created)并且包含描述请求状态并引用新资源的实体和位置标题(参见14.30节) 。

对此方法的响应不可缓存,除非响应包含适当的Cache-ControlExpires标题字段。但是,303(请参阅其他)响应可用于指示用户代理检索可缓存资源。