HTTP GET而不是POST随机发生

时间:2011-03-14 11:41:44

标签: javascript ruby-on-rails http

自1月份以来,我们开始遇到以下问题。随机我们会在网址上收到 GET 请求,这些请求只能接收 POST 表单提交。 GET 请求没有参数(即在URL中看不到表单数据)。此类请求导致Rails路由中的异常(“仅允许发布请求。”),并且用户获得错误页面500.

  • 问题每天发生不到一次(我们每天都会收到数百个 POST 请求)。
  • 似乎发生在多个浏览器(IE7,IE8,Chrome)中。
  • 看来,用表单重新加载页面可以解决问题(我有一个确认的情况,当非重新加载页面时没有修复它)。
  • 我自己无法重现这个问题。
  • 请求来自真实用户,而不是机器人。
  • 表单具有method="post"属性。
  • 问题似乎主要发生在一种形式,但也发生在其他地方。

我检查了javascripts的页面,这可能会对form方法进行一些篡改,但我没有找到任何嫌疑人。该站点由Rails构成,使用了jQuery。

任何想法,可能是什么问题导致或如何调查?

感谢。

更新:我们运行 Nginx + Mongrel群集 Nginx access.log显示我们观察到的 GET 请求, Nginx error.log中没有相关条目。< / p>

2 个答案:

答案 0 :(得分:1)

我检测到Chrome的类似行为,执行此操作:

  1. 获取表单(html)(response1)
  2. POST表单数据(response2)
  3. 发布另一个表单数据(response3)
  4. 按回来
  5. 在这种情况下,Chrome不会返回到response2页面,而是对第2点中使用的地址进行GET。

    当您更新(f5)由POST制作的网页时,以前的Chrome版本会出现类似的错误。

    Chrome版本:32.0.1700.76 m

答案 1 :(得分:0)

我在服务器上看到过类似的错误。大约一年或更久以前。到目前为止,我记得这是由我们的Web服务器引起的。 Passenger的旧版本与Apache的效果不佳。乘客升级到更新版本修复了问题。现在我已切换到Nginx。

因此,无论您使用什么,请确保您已更新了网络服务器软件。并检查您的Web服务器日志是否有错误,而不是Rails production.log。