首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTP 307情况下的文件上传

问HTTP 307情况下的文件上传
EN

Stack Overflow用户
提问于 2017-04-29 06:22:14
回答 2查看 747关注 0票数 7

我正在编写一个Spring控制器,它处理来自客户端的HTTP PUT请求,生成S3预签名的url,并发出HTTP307状态(临时重定向)代码。因此,基本上我是在对客户端进行身份验证,如果身份验证成功,则要求他写入s3文件夹。客户端能够写入签名的url位置。

现在我担心的是客户端必须上传两次。一次到我的应用服务器,然后到s3,所以操作将花费两倍的时间。

我的理解是正确的吗?在这种情况下,客户端真的写2吗?或者,客户端是否足够智能,只先推送部分有效负载,如果成功,则推送整个有效负载?

我读到了HTTP100状态代码,但看起来应用服务器/tomcat已经发出了它,并且不在我的控制之下。

这是我的弹簧控制器

代码语言:javascript
复制
@RequestMapping("/upload")
public ResponseEntity<Void> execute(HttpServletRequest request) throws IOException, ServletException {

  HttpHeaders headers = new HttpHeaders();
  String redirectUrl = getRedirectUrl(requestURI, request.getMethod());
  headers.setLocation(new URI(redirectUrl));

  ResponseEntity<Void> redirectEntity = new ResponseEntity<Void>(null,headers,HttpStatus.TEMPORARY_REDIRECT);
  return redirectEntity;
}

如何阻止clint将整个有效负载上传到我的应用服务器?

EN

回答 2

Stack Overflow用户

发布于 2017-05-06 21:06:45

所以我的理解是正确的吗?

答案是肯定的。服务端读取包含body的完整请求后,会发送PUT请求的响应。当你的客户端重复这个请求时,在响应307 (Temporary Redirect)时,它就像一个新的http请求。

此外,在此方法中还应考虑使用spec中的307响应代码(见下文)的要点。

如果接收到307状态代码以响应其他请求,则为

,则用户代理不能自动重定向

请求,除非它可以被用户确认,因为这可能

更改发出请求的条件。

在点上

How can i prevent client from uploading the entire payload to my app server?您可以从控制器在后台上传到s3,并返回重定向响应(301?)指向将返回上载请求状态的URL。

票数 3
EN

Stack Overflow用户

发布于 2017-05-03 09:20:51

这不是HTTP的工作方式,除了关闭连接之外,HTTP没有停止文件上传的机制,但是如果您关闭连接,您将无法返回重定向信息。

如果您希望客户端直接上传到S3,则需要分两步完成。

让客户端请求文件传输的URL,然后让客户端使用所需的URL启动传输。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43689657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档