azure - CORS 预检请求不适用于 Azure API 管理

标签 azure cors azure-api-management

我有 2 个 Azure 网站(ASP.NET MVC 5 和 ASP.NET WebApi 2)。 MVC 网站有一些 jQuery 尝试将 CORS 请求发布到 WebApi。如果直接连接到 WebApi,它就可以正常工作。但是,当尝试通过 API 管理进行连接时,它不起作用。

我在 Chrome 中遇到的错误是:

XMLHttpRequest cannot load https://XXXXXX.azure-api.net/api/search. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://YYYYYY.azurewebsites.net' is therefore not allowed access.

我排除了 WebApi 配置的问题,因为正如我所说,它可以直接工作。

以下是我的政策:

<policies>
    <inbound>
        <cors>
            <allowed-origins>
                <origin>*</origin>
                <!-- allow any -->
            </allowed-origins>
            <allowed-headers>
                <header>accept</header>
                <header>accept-encoding</header>
                <header>access-control-request-headers</header>
                <header>access-control-request-method</header>
                <header>connection</header>
                <header>content-type</header>
                <header>host</header>
                <header>origin</header>
                <header>referer</header>
                <header>user-agent</header>
            </allowed-headers>
            <expose-headers>
                <header>access-control-allow-headers</header>
                <header>access-control-allow-origin</header>
                <header>cache-control</header>
                <header>content-length</header>
                <header>date</header>
                <header>expires</header>
                <header>pragma</header>
                <header>server</header>
                <header>set-cookie</header>
                <header>x-aspnet-version</header>
                <header>x-powered-by</header>
            </expose-headers>
        </cors>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
</policies>

有什么想法吗?

最佳答案

CORS 策略的预期用途是当您的后端不支持 CORS 的情况。在这种情况下,您可以放入此策略,它将回复 OPTION 请求,而不将它们转发到您的后端。您可以使用此策略来决定要处理 CORS 的来源/ header /方法。

或者,如果您的后端已经支持 CORS,并且您认为在 APIM 级别处理 CORS 流没有任何好处,您可以只代理整个流。为此,您应该删除 CORS 策略,并使用 OPTIONS 方法在 APIM 中的 API 中创建一个新操作,以便 OPTIONS 请求正常转发到后端。

关于azure - CORS 预检请求不适用于 Azure API 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33719657/

相关文章:

Azure APIM 在一个实例中设置多个环境

Azure API 管理订阅到期

json - ARM Azure Web 应用程序的 createUiDefinition.json

javascript - 如何为所有 Azure Application Insight 请求添加自定义属性 (JavaScript)

javascript - 有什么办法可以绕过测试服务器的跨源资源共享?

azure - 通过 terraform 发布 APIM 开发者门户

javascript - 无法在网络聊天中获取认知服务 token

node.js - 永远的日志不断增长

jquery - Magento 2 token 身份验证 - 400 错误/CORS 问题

使用 CORS 的 HTTP 站点到 HTTPS 网络服务