Http 跨浏览器将302重定向发送回您所在的页面是否安全?

Http 跨浏览器将302重定向发送回您所在的页面是否安全?,http,cross-browser,Http,Cross Browser,在某些情况下,我希望将302重定向发送回同一页面。例如,如果我有一个随机数据存储错误,我可以将它们重定向到同一个页面,让它们自动重试 我在firefox和chrome上测试了这个功能,效果很好,但我不知道在其他浏览器中是否会遇到问题。你不能指望它在一般情况下正常工作。法官说 客户端应该检测无限重定向循环 但是,关于如何做到这一点,什么都没有。在第一次重定向时检测是否存在循环并立即出错,这完全符合标准 (另外,既然你是服务器,为什么不自己重试呢?不,你不能相信任何浏览器都会将给定302的页面重新加

在某些情况下,我希望将302重定向发送回同一页面。例如,如果我有一个随机数据存储错误,我可以将它们重定向到同一个页面,让它们自动重试


我在firefox和chrome上测试了这个功能,效果很好,但我不知道在其他浏览器中是否会遇到问题。

你不能指望它在一般情况下正常工作。法官说

客户端应该检测无限重定向循环

但是,关于如何做到这一点,什么都没有。在第一次重定向时检测是否存在循环并立即出错,这完全符合标准


(另外,既然你是服务器,为什么不自己重试呢?

不,你不能相信任何浏览器都会将给定302的页面重新加载到同一路径。有些人会遵循HTTP规范,选择不重试请求,而是告诉用户它遇到了无限重定向循环。
因此,最好使用JavaScript位置重定向

最终,您应该让用户的请求等待响应,直到获得正确的响应为止。因此,如果您无法访问数据存储,您的webapp应该推迟响应请求,直到它能够访问数据存储并形成响应,或者它在您选择的某个阈值超时并告诉用户它有错误,比如500或404


回想一下,404还没有消失(410),并且“404错误表示请求的资源可能在将来再次可用。”您可能会对您的问题感兴趣。

@dlambin:这很公平。我进行了编辑,以使结论更加明确。我不会在服务器端重试,因为我在应用程序引擎上,并且您可以花在服务请求上的时间有30秒的限制。在某些情况下,这可能会受到影响。也许我只是将一个未使用的查询字符串变量附加到我说要重定向到的url。这应该是正确的吗?404还表示,由于它的第一个数字,客户机应该为故障负责。因为这里不是这样,所以相应的响应来自5xx系列。我的观点是,所有错误代码都表明用户会将错误归咎于服务器。责怪不是在规范的语言中:FWIW,尽管每个人都告诉你不要这样做(我倾向于同意),这种事情在一些主要网站上使用。您必须做的一件事是确保302上的头指示响应不可缓存。您可能还希望确保当前页面上的标题也不可缓存。