【问题标题】:ColdFusion not handles HTTP OPTIONS requests for CFCColdFusion 不处理 CFC 的 HTTP OPTIONS 请求
【发布时间】:2013-04-13 00:10:42
【问题描述】:

场景:

  • 托管基于 ExtJS 的前端应用程序的网络服务器。
  • 托管后端服务的 ColdFusion 10 服务器(带有 Apache)。
  • 前端应用程序以http://<CF_server>/<app_path>/<CFC>?method=someMethod&... 形式向 ColdFusion 组件 (CFC) 发出 AJAX 请求
  • 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 标签运行测试后,我发现:

  • 对 CFM 使用 OPTIONS 方法的 HTTP 请求类似于 GET 方法:触发 Application.cfc(或RequestStart,...)上的事件方法,返回文件内容和标头。
  • 对 CFC 使用 OPTIONS 方法的 HTTP 请求不会触发事件,不会返回文件内容或标头。
  • 对不存在的 CFC 的调用(使用 OPTSIONS 方法)返回相同的结果。

为什么CF在调用CFC时不处理OPTIONS方法?

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

这类似于没有响应的线程:http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:59715

谢谢。

【问题讨论】:

    标签: ajax extjs coldfusion


    【解决方案1】:

    我最近在使用 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 调用时存在许多差异。我不记得具体细节,但如果这是最终要求,请测试早期的跨浏览器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-24
      • 2019-08-29
      • 2018-01-03
      • 1970-01-01
      • 2021-09-26
      • 2016-07-27
      • 2010-09-18
      • 2020-09-06
      相关资源
      最近更新 更多