发布/重定向/获取:获取被多次调用

问题描述:

我有一个网页,它有一个通过POST提交的表单。此POST路由处理一些数据并将用户重定向到GET路由。问题:GET路由被多次调用,通常是3次。所以三个GET被触发,用户看到了第一个GET请求。其他两个GET请求我可以在我的日志中看到。发布/重定向/获取:获取被多次调用

有时甚至发生了GET被称为三次以上...

(当然POST路线就被称为一次...)

通过我使用JRuby的方式/ Jetack/Sinatra on Jetty( - > Google App Engine)。问题发生在本地和远程。

菲利普

+0

我已经看到服务器*在POST请求后的响应是302,c.f.这里http://www.gittr.com/index.php/archive/details-of-sinatras-redirect-helper/我将代码更改为303,但问题保持不变... – Philip 2010-11-13 16:08:26

+0

我能够调试问题更多:在GET响应HTML中,有一个Javascript使用相对URL从服务器加载图像。 (/image/some_image.png)如果我删除加载图像的代码,问题不会发生。实际上,在响应图像GET时,服务器发送一些304东西(匹配请求的序列号)...反正我可以通过使URL绝对地包括主机名来解决问题... – Philip 2010-11-18 01:52:59

+0

它可能有助于发布(a)验证您的客户端没有发送多个GET请求,(b)分别执行POST和GET请求以验证POST请求是否触发了多余的GET。您可以使用'curl -vL'来详细地打印发出的请求并遵循重定向,并使用ctrl-z&'fg'(如果在Linux上)在POST和GET之间暂停以检查您的服务器日志。 – 2010-11-22 15:35:33

不知道没有看到代码,但在大多数情况下,脚本将继续重定向函数的调用后执行。在调用redirect_to之后立即尝试从你的方法返回。

+0

Sinatra是非常高的水平,所以它在调用重定向后离开函数。正如人们所期望的那样,HTTP消息体是空的。 – Philip 2010-11-13 16:10:36

+0

我不熟悉Sinatra - 在Rails控制器中,从动作返回将终止控制器。在更高的抽象层次上应该有一些等价物,如exit(0)来终止PHP脚本。 – Thilo 2010-11-13 16:16:44

+0

我刚刚检查了一下,但在Sinatra重定向后的返回语句没有任何区别,因为没有达到。但是它是类似的,Sinatra中的return语句完成了响应,然后该实例可以用于处理下一个请求。 – Philip 2010-11-15 11:38:43

代码中存在一个逻辑错误。修理它。

我在我的代码之前(虽然不同的平台)有同样的问题。原来,这是页面中引用与页面相同的url的元素。我有1个损坏的图像和2个被忽略的CSS文件已被设置为父页面。

如果是同一类问题,您可以使用Firebug的网络标签来验证和调试。

+0

我认为它略有不同,萤火虫只是表明,everthings是正常的... – Philip 2010-11-23 20:42:02