您如何处理从HTTP POST发送的所有方法?

时间:2009-06-02 05:38:10

标签: http post

想象一下,用户刚刚将数据发布到您的Web应用程序,并且您希望重新显示当前页面,并显示有关其成功或失败的消息。这很复杂。

如果数据有效并且用户期望使用html,则您希望发出重定向,以便刷新不会导致重新发布。您希望重定向到引用程序(如果存在)并显示消息。如果他们不期望html,你只需返回200 OK。

如果数据无效且用户期望使用html,则您希望重新呈现他们来自的页面,并显示可见错误,以便他们可以重新发布。为此,您必须运行上一个操作,并使其知道错误消息。要确定哪个是上一个操作,也许您将其作为表单中的隐藏参数包含在内。如果他们不期望html,您可以返回适用的4xx客户端错误。

我发现自己做这种愚蠢的舞蹈的次数太多了。所以问题是:

1)你如何抽象整个过程,以便任何形式的帖子可以利用它?

2)在您喜欢的Web框架中实现这一目标的最可维护或最不重复的方法是什么?

3)您是否有任何改变这整个过程会使其变得更简单?

创意1:永远不要在帖子上呈现,始终重定向。将请求中的错误数据填入会话中一段时间​​,然后清除它,就像成功消息一样。这样,有效和无效的帖子可以用同样的方式处理。

创意2:不要做任何正常的HTTP帖子。只使用ajax。现在您根本不必担心渲染或重定向。这只有在你已经拥有ajax-heavy的应用程序时才有用。

3 个答案:

答案 0 :(得分:3)

理念2不在窗外。这是一个可怕的想法,根本没有必要。 AJAX很好,但不要过度。更不用说 - 禁用Javascript的那大块用户呢?

我认为你所想的(不知道它)是Post/Redirect/Get模式。这是最好的做法,你应该遵循它。基本上,正如您所说,您从不通过重定向以外的任何其他方式响应POST。就通知而言,大部分时间你知道因为特定的行为而来自哪里。如果不这样做,HTTP REFERER是一个不错的选择。是的,它可以被禁用,但是大约1%的用户,如果是这样的话。就通知而言,会话非常适合这种情况。只需将代码和消息存储在当前会话中,并使模板了解它们。打印出消息(如果存在)并删除会话变量。

答案 1 :(得分:0)

回发中没有任何耻辱,你无法真正避免回发,因为这是跨HTTP请求持久保存数据的最简单方法。那个或查询参数仍然是服务器的另一个往返,所以它相当于一些权衡。建议不要使用View状态或会话。

理想情况下,同一页面将检查请求是否为回发并处理其中的所有逻辑。因此,通常情况下,您的代码或带有表单的应用程序页面将有一个部分来处理回发。

答案 2 :(得分:0)

制作体面的Web应用程序而不需要JavaScript是太多工作。我将在这些情况下使用AJAX。