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

时间:2018-08-29 01:20:19

标签: azure-api-management

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

如果存在Origin标头,并且不是Cors策略中指定的标头之一,则即使邮递员也将返回空响应。

一旦禁用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管理不会降低响应。

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

1 个答案:

答案 0 :(得分:1)

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

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

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