我正在使用我公司其他人制作的API,并且他创建的其中一个端点接受来自另一个端点提供的访问密钥头的GET请求。我使用以下jQuery AJAX来调用它:
$.ajax({
type:'GET',
url: 'http://myapi.com',
crossDomain: true,
headers: {
"token": data.AccessKey
}
})
在Chrome中,这会在控制台中返回2条错误消息:
OPTIONS http://myapi.com jquery.min.js:4k.cors.a.crossDomain.send jquery.min.js:4n.extend.ajax jquery.min.js:4(anonymous function) (index):69j jquery.min.js:2k.fireWith jquery.min.js:2x jquery.min.js:4(anonymous function) jquery.min.js:4
XMLHttpRequest cannot load http://myapi.com. Invalid HTTP status code 405 (index):1
在Firefox中我遇到了不同的错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myapi.com. This can be fixed by moving the resource to the same domain or enabling CORS.
但是我们在API服务器上启用了CORS(我们之前在Chrome上也收到了这条消息),所以我不知道为什么会这样说。
我知道这个端点期待GET请求。如果我发送此请求时根本没有标题,则会返回200状态和包含预期“您需要密钥才能访问此信息”的响应。如果我们在hurl.it上尝试它,那么使用有效密钥作为标头的GET请求将返回预期结果。
由于CORS,它正在运行飞行前的OPTIONS请求,我认为这是405错误,但是服务器不应该接受OPTIONS方法吗?我们如何确保接受此方法?还有别的东西我还没抓到吗? CORS对我来说是一个新概念,所以你可以自由地回答ELI5。