【问题标题】:ColdFusion REST API Enable CORSColdFusion REST API 启用 CORS
【发布时间】:2019-12-12 21:01:29
【问题描述】:

我正在尝试使用 Coldfusion 组件构建 REST API,但我不知道如何启用 CORS。我正在使用 IIS 10 和 ColdFusion 2016。我在 IIS 中找不到任何地方来按照谷歌上的说明配置 CORS,而且我在 CF 管理设置下看不到任何地方来启用 CORS,所以我想我会尝试在我的API 而不是在每个环境中摆弄配置,我将它部署到 (qa, uat, prod)。

这是我的 application.cfc 当前的样子,您可以在 onRequestStart 中看到我正在尝试设置标头(我尝试过两种方法)

<cfscript>
    component output="false" {
        this.name = ....


        public boolean function onApplicationStart() {\
            restInitApplication( ... );
            return true;
        }

        public void function onApplicationEnd(ApplicationScope) {
            return;
        }

        public void function onMissingTemplate(targetPage) {
            return;
        }

        public void function onRequestStart(targetPage) {
            cfheader(name="Access-Control-Allow-Origin", value="*");
            // i've also tried ...
            GetPageContext().getResponse().addHeader("Access-Control-Allow-Origin","*");
        }

        public void function onSessionStart() {
            return;
        }

        public void function onSessionEnd(sessionScope, applicationScope) {
            return;
        }
    }
</cfscript>

【问题讨论】:

    标签: rest coldfusion cors


    【解决方案1】:

    我建议安装 IIS CORS 模块 - reference。这是该参考文献中的一个 sn-p:

    功能概述
    Microsoft IIS CORS 模块是使网站能够支持 CORS(跨域资源共享)协议的扩展。

    IIS CORS 模块为 Web 服务器管理员和网站作者提供了一种使他们的应用程序支持 CORS 协议的方法。使用此模块,开发人员可以将 CORS 逻辑从他们的应用程序中移出并依赖于 Web 服务器。模块对 CORS 请求的处理由配置中定义的规则确定。这些 CORS 规则可以轻松定义或配置,从而可以轻松地将所有 CORS 协议处理委托给模块。

    IIS CORS 模块是一个服务器端 CORS 组件
    CORS 协议管理客户端/服务器通信。通常,Web 浏览器充当客户端 CORS 组件,而 IIS 服务器在 IIS CORS 模块的帮助下充当服务器端 CORS 组件。

    当感知协议的客户端(例如 Web 浏览器)向与当前域不同的域(源)发出请求时,就会发生 CORS 请求。这种情况称为跨域请求。当不使用 CORS 时,跨域请求将被客户端阻止。使用CORS模块时,IIS会根据IIS的配置通知客户端是否可以进行跨域请求。

    不要尝试从 ColdFusion 实现这一点,让 Web 服务器完成它的设计目的。安装模块后,您可以在 web.config 文件中为任何/所有 IIS 站点创建所需的规则。

    示例配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
        <cors enabled="true" failUnlistedOrigins="true">
            <add origin="*" />
            <add origin="https://*.microsoft.com"
                 allowCredentials="true"
                 maxAge="120"> 
                <allowHeaders allowAllRequestedHeaders="true">
                    <add header="header1" />
                    <add header="header2" />
                </allowHeaders>
                <allowMethods>
                     <add method="DELETE" />
                </allowMethods>
                <exposeHeaders>
                    <add header="header1" />
                    <add header="header2" />
                </exposeHeaders>
            </add>
            <add origin="http://*" allowed="false" />
        </cors>
    </system.webServer>
    </configuration>
    

    You can download the IIS CORS module from here.

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 2012-12-26
      • 2016-02-17
      • 2015-11-09
      • 2013-08-16
      • 2017-03-05
      • 2014-09-13
      • 2014-03-03
      • 2019-05-22
      相关资源
      最近更新 更多