【发布时间】:2018-05-01 22:06:33
【问题描述】:
我正在尝试在我的 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 开发人员仪表板中设置的 Origin URI 匹配。)
- Uber 正在返回状态 404(未找到)
有人知道这里发生了什么吗?
【问题讨论】:
-
当所有其他方法都失败时,在您控制的服务器上设置代理
标签: javascript cors http-status-code-404 uber-api http-options-method