我正在编写一个Spring控制器来处理来自客户端的HTTP PUT请求,并生成S3预先签名的url并发出HTTP 307状态(Temp重定向)代码.所以基本上我正在验证客户端,如果成功,那么我要求他写入s3文件夹.客户端可以写入已签名的URL位置.
现在我担心的是客户端必须上传两次.一旦到我的应用程序服务器再到s3,所以操作将花费两倍的时间.
我的理解是否正确?在这种情况下,客户端实际上是否写了2次?或者客户端是否足够智能,只是首先推送部分有效负载,则推送整个负载?
我读到了关于HTTP 100状态代码,但看起来app server / tomcat已经发出它并且不在我的控制之下.
这是我的弹簧控制器
@RequestMapping("/upload")
public ResponseEntity
So my understanding correct?
答案是肯定的.服务器将在读取包括正文的完整请求后发送PUT请求的响应.当您的客户端将重复该请求时,在响应307(Temporary Redirect)中,它将像一个新的http请求.
If the 307 status code is received in response to a request other
than GET or HEAD,the user agent MUST NOT automatically redirect the
request unless it can be confirmed by the user,since this might
change the conditions under which the request was issued.
在点上
如何防止客户端将整个有效负载上传到我的应用服务器?
您可以从控制器上传到后台的s3,并将重定向响应(301?)指向一个URL,该URL将返回上传请求的状态.