如果存在源标头,API 管理将返回空响应



我正在通过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 管理不会削减响应。

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

APIM 不支持带有文件方案的源,仅支持 http 和 https。我会看看我们是否可以修复它。但是,允许来源=*和允许凭据=true的解决方法是使用表达式:

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

这样,响应将包含访问控制允许来源中发送的 Origin 标头值,而不仅仅是不允许的 *。

最新更新