Java HTTP:发送“重试/重定向”响应的正确方式是什么

Java HTTP:发送“重试/重定向”响应的正确方式是什么,java,http,web,http-headers,Java,Http,Web,Http Headers,我需要强制客户端重试其请求,这意味着再次发送相同的请求。我想到的是一个状态代码为307和标题位置的响应:现在已经足够好了,除非有更好的方法 我的问题是,从HTTP规范的角度来看,在这个特定的上下文中,位置的正确值是什么。或者更具体地说,在Java中,有HttpServletRequest类型的请求,我应该使用哪一个:getRequestURI返回该请求的URL的一部分,从协议名称到HTTP请求第一行中的查询字符串,或者getRequestURL重构客户端用于发出包含协议、服务器名称、,端口号和服

我需要强制客户端重试其请求,这意味着再次发送相同的请求。我想到的是一个状态代码为307和标题位置的响应:现在已经足够好了,除非有更好的方法

我的问题是,从HTTP规范的角度来看,在这个特定的上下文中,位置的正确值是什么。或者更具体地说,在Java中,有HttpServletRequest类型的请求,我应该使用哪一个:getRequestURI返回该请求的URL的一部分,从协议名称到HTTP请求第一行中的查询字符串,或者getRequestURL重构客户端用于发出包含协议、服务器名称、,端口号和服务器路径,但不包括查询字符串参数


任何其他建议/评论都将不胜感激。

getRequestURL返回客户端使用的完整URL,其中as-getRequestURI只返回服务器中的基本路径。 我使用此技术重定向响应状态这是我的代码这很有用:-

httpServletResponse.reset();
httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
httpServletResponse.setHeader("SERVER-RESPONSE", "bad request");
return;

您还可以设置响应的标题。

我认为重定向首先是错误的状态代码


这不是503的用途吗

好吧,好吧,没有专门为这种情况定义的状态代码。我在网上找到了不同的建议,适用于稍有不同的场景:503、307、302、423、409或202。之所以选择307,是因为大多数客户端都会自动进行重定向。但正如您已经知道的那样,对于GET和HEAD以外的方法,它们不符合HTTP规范。尽管如此,如果我们在HEAD之后设置Retry,我看到503的潜力。问题是,5XX响应是我们最不希望在日志中出现的内容。这是关于信息的,但我的问题是关于标题的。不要使用发送重定向或请求分派器重定向请求。我用标题设置块更新了代码。我确定,错误请求和未授权都不是有效选项。根据定义,它们是客户的错误,而在本场景中并非如此。客户端在收到错误的请求或未经授权的请求后不应重试同一请求。这肯定需要更多信息:是否要强制客户端刷新内容?或者您正在排队处理?一点上下文:服务器无法处理请求,因为它正在关闭。但是,如果客户机关闭连接并打开一个新连接,并发送相同的请求(相同的方法、头、正文等),他将连接到另一个正在运行的服务器。请看我对朱利安回答的评论。