我正在尝试在我的 JavaScript 客户端中使用 Uber API。
我知道这涉及 CORS,因为我的客户将直接通过 AJAX 访问 Uber API。
在 Uber Developers Dashboard 中,我正确设置了我的 Origin URI。然后,我设置了我能找到的最简单的例子。这来自 Uber 的文档:
<!DOCTYPE html>
<html>
<head>
<title>Uber API Demo</title>
</head>
<body>
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.uber.com/v1.2/products?latitude=37.7759792&longitude=-122.41823');
xhr.setRequestHeader("Authorization", "Token <ServerToken>");
xhr.send();
</script>
</body>
</html>
查看 Chrome 开发工具中的控制台,这就是我所看到的:
而且,最有趣的是“网络”选项卡:
我的浏览器正在将我的 HTTP POST 更改为 HTTP OPTIONS 请求(在 fetch 规范中定义的 CORS 预检的一部分),看起来 Uber 不支持。Uber 的服务器应该回复响应标头,授权我的客户端完成其 API 请求。相反,他们返回 404。
总之:
- Uber 的文档说他们支持 CORS。
- 我在 Uber 的开发者仪表板中正确设置了我的 Origin URI
- CORS 规范说,如果我正在使用 Authorization 标头进行 HTTP POST,那是一个不简单的请求,并且需要 HTTP OPTIONS 预检。
- 我的浏览器正是这样做的,使用 HTTP 方法 OPTIONS 发送请求,其中包含 Origin 标头(与我的 Uber Developer Dashboard 中设置的 Origin URI 匹配。)
- Uber 正在返回状态 404(未找到)
有人知道这里发生了什么吗?