情景:
http://<CF_server>/<app_path>/<CFC>?method=someMethod&...
由于前端和后端位于不同的服务器上,我们处于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标签运行测试后,我发现:
为什么CF在调用CFC时不处理OPTIONS方法?
在我的测试中,我在端口8500上使用集成的CF网络服务器绕过了Apache。我也尝试过使用相同结果的CF9。相反,Railo具有不同的行为:也为CFC处理OPTIONS方法。
这与没有回复的此帖子类似:http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:59715
感谢。
答案 0 :(得分:0)
我最近遇到了与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调用时存在许多差异。我不记得具体细节,但如果这是最终的要求,请测试早期的跨浏览器。