ColdFusion不处理CFC的HTTP OPTIONS请求

场景:

  • 托管基于ExtJS的前端应用程序的Web服务器。
  • 承载后端服务的ColdFusion 10服务器(使用Apache)。
  • 前端应用程序以http://<CF_server>/<app_path>/<CFC>?method=someMethod&...形式向ColdFusion组件(CFC)发出AJAX请求http://<CF_server>/<app_path>/<CFC>?method=someMethod&...
  • CFC用JSON响应。
  • 由于前端和后端位于不同服务器上,因此我们处于CORS(跨源资源共享)环境中,并且AJAX请求向后端发出两个http请求:第一个是用于握手的OPTIONS方法,第二个是POST请求。 我需要在CF服务器上的Apache中启用标头,并使用“Header set Access-Control-Allow-Origin:*”指令来启用CORS,但我希望通过编程方式从CF而不是Apache处理标头。 我运行了一些测试,发现http请求中的OPTIONS方法仅适用于CFM而不适用于CFC,因此第一个AJAX请求(使用OPTIONS方法)失败。 我可以在AJAX调用设置useDefaultXhrHeader属性中绕过OPTIONS请求,但我会理解CF行为。

    使用cfhttp标签运行测试后,我发现:

  • 带有OPTIONS方法到CFM的HTTP请求与GET方法类似:在Application.cfc(orRequestStart,...)上触发事件方法,返回filecontent和头文件。
  • 使用OPTIONS方法向CFC发出的HTTP请求不会触发事件,也不会返回filecontent或标题。
  • 向未提交的CFC调用(使用OPTSIONS方法)返回相同的结果。
  • 为什么CF在调用CFC时不处理OPTIONS方法?

    在我的测试中,我绕过了在端口8500上使用集成的CF网络服务器的Apache。我也尝试过在CF9上使用相同的结果。 相反,Railo具有不同的行为:也处理CFC的OPTIONS方法。

    这与没有回应的线程相似:http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:59715

    谢谢。


    我最近遇到了与CF和Apache CXF相同的问题。

    看起来CF对于GET和POST等其他动词没有定义的行为。 就我而言,我在这里安装了CORS过滤器:http://software.dzhuvinov.com/cors-filter-installation.html

    拦截这些请求,并在它们使它达到您的应用程序之前处理它们。 它适用于CXF并且适用于CF,但缺点是它需要对web.xml进行更改,这可能不适用于某些托管设置。

    另一种选择是配置apache来添加必要的头文件:http://enable-cors.org/server_apache.html

    我还发现浏览器供应商在使用OPTIONS调用时存在一些差异。 我不记得具体细节,但如果这是最终的要求,请尽早测试跨浏览器。

    链接地址: http://www.djcxy.com/p/74061.html

    上一篇: ColdFusion not handles HTTP OPTIONS requests for CFC

    下一篇: How to Create SOAP Header with CF10 Web Service