我正在通过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://
APIM不支持带文件方案的源,仅支持http和https。我会看看我们是否可以解决它。但是allow-originins = *和allow-credentials = true的解决方法是使用表达式:
<allowed-origins>
<origin>@(context.Request.Headers.GetValueOrDefault("Origin", "*"))</origin>
</allowed-origins>
这种方式响应将包含Access-Control-Allow-Origin中发送的Origin头值,而不仅仅是*,这是不允许的。