ColdFusion REST API 启用 CORS

4

我正在尝试使用coldfusion组件构建REST API,但是我无法弄清楚如何启用CORS。 我正在使用IIS 10和ColdFusion 2016。 跟随谷歌上的说明,我找不到在IIS中配置CORS的任何地方,在CF管理设置下也没有看到启用CORS的任何地方,因此我想尝试在我的API中启用CORS,而不是在部署到每个环境(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>
1个回答

5
我建议安装IIS CORS模块 - reference。以下是该参考文献中的一小段内容:

功能概述
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服务器执行其设计的功能。安装模块后,您可以在任何/所有IIS站点的web.config文件中创建所需的规则。

示例配置文件:

<?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>

您可以从这里下载IIS CORS模块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接