如果存在原始标头,则Api管理返回空响应

问题描述 投票:0回答:1

我正在通过Azure ApiManagement对API发布请求。

如果存在Origin头且它不是Cors策略中指定的头,则即使postman将返回空响应。

一旦我禁用Origin标头,我就可以得到响应。

因此基于Web的应用程序存在以下问题我们必须启用cors,

   <cors allow-credentials="true">
        <allowed-origins>
          ${env:CorsOrigin}
        </allowed-origins>
        <allowed-methods>
          <method>*</method>
        </allowed-methods>
        <allowed-headers>
          <header>*</header>
        </allowed-headers>
      </cors>

但我们的cordova应用程序也称为相同的api,默认情况下cordova将附加Origin: file://然后Api管理层正在做一些奇怪的事情,它会切断身体。因此响应将是空的。如果我直接向azure函数提出相同的请求,我将得到适当的回复,并且因为cordova不关心(在我们的情况下在某种程度上可以)关于CORS我会期望api管理不会削减响应。

此外,Api管理不允许我输入*,因为allow-credentials =“true”而且我也无法将其设置为允许file://

azure-api-management
1个回答
1
投票

APIM不支持带文件方案的源,仅支持http和https。我会看看我们是否可以解决它。但是allow-originins = *和allow-credentials = true的解决方法是使用表达式:

<allowed-origins>
    <origin>@(context.Request.Headers.GetValueOrDefault("Origin", "*"))</origin>
</allowed-origins>

这种方式响应将包含Access-Control-Allow-Origin中发送的Origin头值,而不仅仅是*,这是不允许的。

© www.soinside.com 2019 - 2024. All rights reserved.