首页 > 解决方案 > 如何构造一个不需要正文的 POST 请求

问题描述

我有一个 HTTP 客户端向POST服务器发送许多请求。服务器使用201 Created响应正文响应所有请求。出于我的目的,响应标头就足够了,因为我只对Location标头感兴趣。我想避免服务器产生响应主体以显着减少网络流量。

根据RFC 7231,...

  [...] if one or more resources has been created on the origin server as a
  result of successfully processing a POST request, the origin server
  SHOULD send a 201 (Created) response containing a Location header [...]

...,因此,我假设,服务器也可以响应,例如204 No Content,省略正文。

因此我的问题是:是否可以构造一个POST请求,使服务器204 No Content以另一种方式响应或省略响应主体?

更新 1:服务器端是一个 Spring Data REST 项目,我可以自由配置它。我知道我可以设置RepositoryRestConfiguration#setReturnBodyOnCreatefalse,但这会有点过头,因为它会影响所有传入的请求。因此,我更愿意在客户端做出决定。

标签: httpspring-bootpostspring-data-rest

解决方案


您无法从客户端拉出真正的杠杆来控制服务器是否会响应正文,除非您使用的服务具有允许这样做的特定功能。

服务器可能使用的标头是,Prefer: return=minimal但如果服务没有明确记录对此的支持,那么这将起作用的可能性很低。

真的,您唯一可以为客户做的事情是:

  1. 获得响应标头后立即终止 TCP 连接
  2. 收到标头时终止 HTTP/2 流。

这是一件非常“激烈”的事情,但客户端确实在某些情况下使用这种机制并且它确实有效。但是,如果 POST 响应正文有点小,那么它可能并没有真正产生很大的不同,因为响应可能已经发送。


推荐阅读