奇怪的网站导航机制

时间:2009-07-23 14:42:39

标签: html http jsf

我在别人的基于网络的应用程序上执行UAT。系统非常庞大,具有数十种形式,以及数百个单独的输入字段。总的来说,它看起来很好用。

我注意到有一件事对我来说很奇怪。我点击的每个链接实际上都会向我已经在的页面执行POST请求(包含我想要的页面的详细信息),然后响应,然后将HTTP重定向到我想要的页面。对于数据已被更改的页面,我可以理解这样做的事情 - 这将允许系统在没有用户明确强制的情况下保存数据。但是,此行为也用于没有用户输入的页面。

为什么这样做?它似乎引起了系统中一些重大的减速。

如果是帮助,这个系统是用JSF编写的。

2 个答案:

答案 0 :(得分:2)

我不会假装自己是一名广泛开发过JSF的开发人员。但是,我已经在其他技术上创建了许多Web应用程序。

一般来说,对于使用POST请求进行导航,发送额外数据会增加数据负载,并可能导致速度小幅下降。通常,导航执行GET请求被认为是最佳实践。 POST请求通常保存用于需要辅助数据的正在执行的操作的情况。

现在对于POST'ing然后在响应中接收重定向,这很奇怪并且会导致减速,因为您发出两个网络请求而不是一个。我会问,“为什么不让链接指向我正在重新评估的页面?”。我可以理解的唯一答案是某种自定义会话管理,不使用cookie或url会话参数。

可能有更多的理由,但这种类型的设计似乎是非常不必要和诚实的,无论原因是什么,我相信有更好的方法来实现系统不这样做。

答案 1 :(得分:0)

当您在JSF页面中使用<h:commandButton><h:commandLink>时,它将执行HTTP POST;从来没有GET。

如果需要GET,则应使用<h:outputLink>,但开发人员通常会使用前两个标签,因为它们允许在导航之前调用操作 - 即。在打开某个页面之前,开发人员可能希望在支持bean中运行一个方法来设置/初始化一些变量。因此,Web应用程序执行POST可能有充分的理由。

如果不需要任何操作,例如,如果导航是菜单,那么我会考虑更改为使用<h:outputLink>或仅使用Facelets和常规锚标记。