设想:
- 托管基于 ExtJS 的前端应用程序的网络服务器。
- 托管后端服务的 ColdFusion 10 服务器(带有 Apache)。
- 前端应用程序使用表单向 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(或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
谢谢。