azure-api-management - 如果原始标头存在,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。我看看我们能不能修好。但是 allow-origins=* 和 allow-credentials=true 的解决方法是使用表达式:
<allowed-origins>
<origin>@(context.Request.Headers.GetValueOrDefault("Origin", "*"))</origin>
</allowed-origins>
这种方式响应将包含在 Access-Control-Allow-Origin 中发送的 Origin 标头值,而不仅仅是 * 是不允许的。
推荐阅读
- google-cloud-functions - Google Cloud Functions - 如何设置功能(交易机器人)
- tableau-api - 删除特定选定值的菜单选项?
- c++ - 在特定位置向字符串添加空格
- python - Python C 扩展优化速度 (Linux)
- sql - 将新的时间戳值插入到 kamailio 中的 acc 表
- python - python - 如何使用boto3使用python仅将更改的文件从一个S3 Bucket复制到另一个S3 Bucket?
- c# - 如何使用 puppeteer-sharp touchStart 和 touchEnd 和 touch move
- office365 - 如何保护 Office 加载项/防止其他公司安装或使用它
- quantum-computing - 密度矩阵与完整性关系的区别
- javascript - 对 SharePoint 搜索 API 的请求中的 SourceId 是什么?