【问题标题】:CORS Preflight request not working with Azure API ManagementCORS 预检请求不适用于 Azure API 管理
【发布时间】:2016-02-16 14:57:39
【问题描述】:

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

我在 Chrome 中遇到的错误是:

XMLHttpRequest 无法加载 https://XXXXXX.azure-api.net/api/search。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'https://YYYYYY.azurewebsites.net' 因此不允许访问。

我排除了 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>

有什么想法吗?

【问题讨论】:

  • 在您的 allowed-headers/access-control-request-headersn 中有错字 有些人在让 CORS 使用错误输入的标头时遇到问题 stackoverflow.com/questions/26121824/… 这只是 SO 问题中的错字,还是在您原来的政策中?
  • 干杯,我修正了政策上的类型,但没有任何区别。 :(
  • 您是否还添加了授权标头?我在使用带有 COR 的 api 应用程序时遇到此错误。
  • 这个运气好吗?我目前正在自己​​处理这个问题,并没有在网络上找到太多帮助。
  • 这里也一样。我已经苦苦挣扎了一个星期,并尝试了我可以在网上搜索的所有内容。现在我完全得到了 CORS 的用途,但我的角度 localhost 应用程序仍然出现“不存在 'Access-Control-Allow-Origin' 标头”错误。非常令人沮丧。

标签: azure cors azure-api-management


【解决方案1】:

CORS 政策的预期用途适用于您的后端不支持 CORS 的情况。在这种情况下,您可以放入此策略,它会回复 OPTION 请求,而不会将它们转发到您的后端。您可以使用此策略来决定为 CORS 处理哪些来源/标头/方法。

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

【讨论】:

  • 真的吗???带有 APIM 的 CORS 非常令人困惑。有没有地方可以解释如何做到这一点?我一直在寻找一段时间,但没有找到对我有意义的说明。我觉得自己很愚蠢。
  • CORS 通常并不是一个明确的规范。我可以建议的最佳起点是 MDN:developer.mozilla.org/en-US/docs/Web/HTTP/CORS。在那篇文章之后,应该更清楚为什么将 cors 策略添加到 APIM 中以及它解决了哪些问题。
  • 对不起,我指的是设置 APIM 以将 CORS 请求转发到后端。一般来说,我得到了 CORS,但我在 APIM 中设置 CORS 时遇到了困难。而且,我了解 APIM 如何通过策略设置处理 CORS 协商,但不了解它如何通过转发到后端来处理。这个答案告诉我如何在一般步骤中执行此操作,但没有足够的细节让我遵循。
猜你喜欢
  • 1970-01-01
  • 2017-06-20
  • 2020-11-18
  • 2018-09-24
  • 2018-05-22
  • 2015-03-21
  • 2014-09-05
  • 1970-01-01
  • 2020-10-12
相关资源
最近更新 更多