【发布时间】:2015-09-30 06:50:47
【问题描述】:
编辑:没有 JSONP!是的,我知道 CORS 是由服务器处理的,是的,服务器确实支持它。问题在我这边。
我正在尝试从浏览器中使用 MediaWiki API。我正在通过 XMLHttpRequest 发送 GET 请求,但由于 CORS 问题,它无法正常工作。收到响应后,我的浏览器收到以下消息:
XMLHttpRequest 无法加载 https://en.wikipedia.org/w/api.php?format=json&action=query&list=search&srsearch=Oculus&utf8。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://127.0.0.1:8000' 因此不允许访问。
我明白为什么会遇到这个问题,但我不知道如何从浏览器/JavaScript 端解决它。
代码:
xmlhttp.open("GET","https://en.wikipedia.org/w/api.php?format=json&action=query&list=search&srsearch=" + subreddit + "&utf8",true);
xmlhttp.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
xmlhttp.send();
我尝试过的一些事情:
xmlhttp.setRequestHeader('Access-Control-Allow-Origin', 'http://localhost');
xmlhttp.setRequestHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
xmlhttp.setRequestHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
xmlhttp.setRequestHeader('Access-Control-Allow-Credentials', true)
xmlhttp.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
并在 url 中设置参数 origin 或作为 setRequestHeader 返回无效/错误的 Origin,被拒绝。
【问题讨论】:
-
所以我因为提出一个有效的问题而被否决了? “重复”问题提供了解决方案,例如使用 JSONP,这不是我想要的。其他答案说要设置标题或显然是错误的。重新迭代我不想使用 JSONP。最佳答案链接到使用 XDomainRequest() 而不是 XMLHttpRequest() 的博客。经过比较,似乎需要 XDomainRequest() 来实现 CORS 兼容性。
-
那么那个“重复”问题的答案都不是有效的。
-
JSONP 不能解决问题,它只是绕过了 CORS 问题。 MediaWiki 支持 CORS,所以我不知道为什么会遇到这个浏览器问题。
标签: javascript http cors mediawiki mediawiki-api