我正在通过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://
答案 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头值,而不仅仅是*,这是不允许的。