调试:IE6 + SSL + AJAX +发布表单= 404错误
那个设定:
有问题的程序尝试通过AJAX调用将表单数据发布到与调用者相同的程序包中包含的目标过程。这是对使用安全连接(HTTPS)的站点完成的。这里使用的技术是PLSQL和DOJO JavaScript库。开发工具基本上是文本编辑器。
代码段:
> function testPost() { >> dojo.xhrPost( { url: ''dr_tm_w_0120.test_post'', form: ''orgForm'', load: testPostXHRCallback, error: testPostXHRError }); } > function testPostXHRCallback(data,ioArgs) { >> alert(''post callback''); try{ dojo.byId("messageDiv").innerHTML = data; } catch(ex){ if(ex.name == "TypeError") { alert("A type error occurred."); } } return data; } > function testPostXHRError(data, ioArgs) { >> alert(data); alert(''Error when retrieving data from the server!''); return data; }
问题:
使用IE6(整个用户库都使用)时,从服务器发送回的响应是404错误。
观察结果:
该程序在Firefox中可以正常运行。
调用过程不能以同一包中的任何过程为目标。
调用过程可以针对外部站点(http,https)。
包中的其他AJAX调用(不是表单数据的发布)可以正常工作。
我搜索了互联网,并咨询了高级技术团队成员,但没有发现任何令人满意的解决方案。
*在Dojo支持论坛上进行了问答。
问题:
我们推荐什么故障排除技术?
我们推荐使用哪些故障排除工具进行HTTPS分析?
关于这个问题可能有什么假设?
对于不是完全(坏)黑客的解决方法有什么想法吗?
埃德解决方案
lomaxx,提琴手技巧的thx。我们不知道将其用作调试工具有多棒。启动之后,这就是我发现的内容以及如何修复它(至少在短期内):
> ef Fri, 8 Aug 2008 14:01:26 GMT dr_tm_w_0120.test_post: SIGNATURE (parameter names) MISMATCH VARIABLES IN FORM NOT IN PROCEDURE: SO1_DISPLAYED_,PO1_DISPLAYED_,RWA2_DISPLAYED_,DD1_DISPLAYED_ NON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM: 0
看到来自服务器的消息后,我又踢了Fiddler几步,看看还能从中学到什么。发现有一个WebForms选项卡,用于显示Web表单中的值。我们不知道吗,上面的"xxx_DISPLAYED_
"字段就在其中。
我还真不明白为什么这些字段存在,因为我没有在WebPLSQL
代码中显式创建它们。但是我现在确实知道目标过程必须将它们作为参数包括在内才能正常工作。再说一次,这对我来说只是IE6,因为Firefox工作正常。
好吧,这是短期的答案,并且可以解决它。希望在此领域中进行更多的工作将有助于更好地理解此处的基本原理。
解决方案
回答
呼叫的第一站将是启动Fiddler并分析往返于浏览器的数据。
看一下标头,实际调用的url和传递给AJAX方法的参数(如果有的话),然后在到达服务器之前查看它们是否看起来都不错。
如果一切正常,我们是否可以通过日志记录或者通过AJAX方法进行跟踪来验证其是否确实在攻击服务器?
埃德:我想尝试的另一件事是建立一个测试页面,以使用基于非ajax的调用在服务器上调用AJAX方法,并分析提琴手中的流量并进行比较。