cors - Microsoft Academic Search API 停止工作
问题描述
我成功地使用了Microsoft Academic Search API,但由于某种原因,我未更改的代码在大约 2 周前停止工作,不知道为什么。我将其归结为一些 CORS 问题:预检OPTIONS
请求导致 404 并直接POST
使用mode: 'no-cors'
阻止Ocp-Apim-Subscription-Key
发送自定义 API 密钥标头 (),导致 401。我从未查看过网络开发选项卡,而一切都是仍在工作,也许 OPTIONS 请求在两周前仍然有效?还是我这边的 Firefox 更新?
我已经尝试过 GET 和 POST 请求,我已经尝试过 axios 和 fetch API,我已经尝试过 no-cors 和 cors 请求。除非手动将 API 密钥添加到标头,否则没有任何效果。
// simple no-cors request
fetch(
'https://api.labs.cognitive.microsoft.com/academic/v1.0/evaluate',
{
method: 'POST',
mode: 'no-cors', // I've tried removing this line for CORS request
headers: new Headers(
{ "Content-Type": "application/x-www-form-urlencoded", "Ocp-Apim-Subscription-Key":"[actual key not needed for replication]" }
),
body: "expr=Id%3D2101196984&attributes=Id"
}
).then( response => { console.log(response);} )
.catch(err => console.log(err))
看看Ocp-Apim-Subscription-Key
标题是如何丢失的。经过一些研究,我意识到这是由于no-cors
模式(见这里)。简单的 POST 标头:
Host: api.labs.cognitive.microsoft.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Origin: null
Content-Length: 34
DNT: 1
Connection: keep-alive
此请求导致 401,权限被拒绝。注意我在示例中使用了一个虚拟密钥,但是我的真实密钥也遇到了同样的问题,这一定是由于遗漏了,Ocp-Apim-Subscription-Key
因为当我在手动添加密钥头后重新发送请求时,响应工作得很好(使用开发人员工具栏 Network=>Headers 选项卡中的 Firefox 的“编辑和重新发送”功能并手动添加一行Ocp-Apim-Subscription-Key: [actual key]
)。
但是,当我使用 CORS 请求时,服务器无法真正处理以下 OPTIONS 预检请求,返回 404。
发送与上述相同的 fetch-request 时出现请求 OPTIONS 标头,只是没有mode: 'no-cors'
Host: api.labs.cognitive.microsoft.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Access-Control-Request-Method: POST
Access-Control-Request-Headers: ocp-apim-subscription-key
Origin: null
DNT: 1
Connection: keep-alive
响应头:
HTTP/1.1 404 Resource Not Found
Content-Length: 89
Content-Type: application/json
Date: Mon, 28 Oct 2019 10:59:03 GMT
还有其他人遇到这个问题吗?有什么我可以做的吗,或者这似乎是微软方面的服务器问题?
解决方案
我很高兴地说 CORS 问题应该最终得到解决。问题本身是内部迁移期间配置错误的结果。
对延迟解决表示歉意!
推荐阅读
- flutter - 底部溢出 81 个像素
- python - 从酥脆的表单中排除内容字段
- web - Mailcow 交换网络服务
- react-native - React Native 应用程序是否忽略已安装的 SSL 证书?
- python - 使用 Python 连接到 AWS EC2 托管的 MySQL RDS 会导致身份验证错误
- c - C 字符串初始化中的明显奇怪之处:printf 和 strlen 似乎都出错了?
- c# - 如何在 C# 中启用/禁用面板/按钮?
- angular - 如何在 Angular 上使用 API 创建实时搜索
- ios - 在某些设备上,数据未保存在 UserDefaults 中
- google-cloud-firestore - 冗余快照侦听器和读取