奇怪的网站导航机制

问题描述:

我在别人的基于Web的应用程序上执行UAT。该系统相当庞大,数十种形式,以及数百个独立的输入字段。总的来说,它看起来很好,可用。奇怪的网站导航机制

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

为什么这样做?这似乎是在推动系统中一些主要的减速。

如果是帮助,则使用JSF编写此系统。

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

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

现在POST'ing然后接收响应中的重定向,这是奇怪的,并会导致放缓,因为你是两个网络请求而不是一个。我会问,“为什么不把链接指向我正在被重新指向的页面?”。我能够理解的唯一答案是某种不使用cookie或url会话参数的自定义会话管理。

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

+0

谢谢,我在想几乎相同的事情 - 很高兴知道我不是唯一的一个! – jwoolard 2009-07-23 15:55:28

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

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

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