繁体   English   中英

ColdFusion REST API 启用 CORS

[英]ColdFusion REST API Enable CORS

我正在尝试使用 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>

我建议安装 IIS CORS 模块 - 参考 这是该参考文献中的一个片段:

功能概述
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>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM