Apache背后的JSF与SSL-h:commandLink(带和不带f:ajax)
[编辑]-感谢您的评论。我已经尝试了相应地形成我的问题,并且根据提供的建议添加了一些额外的信息 我有一个JSFWeb应用程序在JBossAS7上运行,我在SSL(端口443)上与Apache一起使用它。Apache和JBoss在同一台机器上运行,并通过HTTP通过反向代理转发规则进行“透明”通信。在这个设置中,我观察到,单击通过JSF标记Apache背后的JSF与SSL-h:commandLink(带和不带f:ajax),apache,jsf,ssl,primefaces,commandlink,Apache,Jsf,Ssl,Primefaces,Commandlink,[编辑]-感谢您的评论。我已经尝试了相应地形成我的问题,并且根据提供的建议添加了一些额外的信息 我有一个JSFWeb应用程序在JBossAS7上运行,我在SSL(端口443)上与Apache一起使用它。Apache和JBoss在同一台机器上运行,并通过HTTP通过反向代理转发规则进行“透明”通信。在这个设置中,我观察到,单击通过JSF标记创建的任何链接(即没有,并且始终存在一个真正的支持bean操作方法,该方法在执行一些业务逻辑后,返回带有?faces redirect=true后缀的结果)将看
创建的任何链接(即没有
,并且始终存在一个真正的支持bean操作方法,该方法在执行一些业务逻辑后,返回带有?faces redirect=true
后缀的结果)将看到页面重定向失败,因为https
方案被删除并替换为http
如果我将
的所有实例替换为
,则此重定向问题将消失-即https
方案将保留在生成的重定向URL中
有人能解释一下我在观察什么,以及在这种情况下非ajax表单提交和ajax提交之间的“幕后”区别是什么吗
其他信息:
我的Apache反向代理规则:
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order Allow,Deny
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/ timeout=1800
ProxyPassReverse / http://localhost:8080/
ProxyRequests关闭
代理主机
命令允许,拒绝
通融
ProxyPass/http://localhost:8080/ 超时=1800
ProxyPassReverse/http://localhost:8080/
Firefox中的web控制台显示了ajax表单提交和非ajax表单提交HTTP请求之间的区别,如下所示:
Ajax通过
提交
我在https
上看到对预期页面的GET请求(我还不能发布屏幕截图)
通过
非ajax版本首先在https
上以302状态代码“暂时移动”发回同一页面(预期),然后从http
上的操作方法重定向到目标页面
在HTTP上获取重定向失败之前,POST在HTTP标头中的位置
这是一个屏幕截图。POST的位置值显示为GET请求的URL,位于http
而不是https
:
我想我在这一点上有点“被蒙在鼓里”。由于
方法达到了预期的结果,我很高兴不去管它。似乎至少还有一些其他JSF帖子与这类事情相关(这里是我可以发布的唯一URL):
也许需要基于ajax的方法将方案保存在源于客户端的URL中
谢谢
-Andy
h:commandLink
不会放弃协议方案。发布您正在使用的XHTML。我同意h:commandlink不会放弃该方案。在本例中,它使用的是获取请求的方案,即来自Apache的http(与JBoss在同一台机器上)。也就是说,当我不在前面使用Apache并直接在SSL(8443)或HTTP(8080)上运行JBoss时,h:commandlink工作正常。在上述任何一种情况下,它都会维护该方案(就像它在Apache面前以clear on http进行通信时一样)。假设您使用ProxyPass,您是否也配置了proxyPassReverse?(更多,但apache配置的相关细节与您的想象非常相关),通过查看浏览器开发工具中的网络选项卡,可以很容易地观察到这些差异。这是一个正常响应,而不是http重定向响应。StackoverflowBtw上有大量关于?faces重定向的详细信息,如果在h:commandLink
中添加f:ajax
,或者使用h:commandButton
可以观察到相同的差异。它与jsf无关。当然与PF无关。