没有& # 39;Access-Control-Allow-Origin& # 39;头文件存在.因此,不允许访问Ori
No 'Access-Control-Allow-Origin' header is present. Origin is therefore not allowed access
编辑:无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'标头。因此,不允许访问源'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。
<script src='https://en.wikipedia.org/w/api.php?format=json&action=query&list=search&srsearch=Oculus&utf8&callback=callbackname'></script>
<script>
function callbackname(data){
//you can get response data here
}
</script>
如果你使用jquery。
$.getJSON('https://en.wikipedia.org/w/api.php?format=json&action=query&list=search&srsearch=Oculus&utf8&callback=?', function(data){
//you can get response data here
})
如前所述,您在请求中传递的origin
参数和浏览器在AJAX调用中发送的Origin
标头应该匹配,并且它必须匹配外部wiki上$wgCrossSiteAJAXdomains
中的一个值。由于您的Origin(在您的情况下为http://127.0.0.1:8000或localhost:8000)在$wgCrossSiteAJAXdomains
中不可用,MediaWiki API将永远不会在响应中发送Access-Control-Allow-Origin
标头,并且任何CORS请求都将失败,您将在浏览器的控制台中看到错误。
另一个需要考虑的重要事实是
MediaWiki API在维基媒体网站上用于做像允许图像这样的事情直接从手机上的维基百科网站上传到共享资源接口。
这个API不供任何主机的公共使用,它只供一组经过验证的主机使用。
如果你想尝试一些CORS请求,你可以从这里使用GitHub API。下面是一个示例笔向GitHub API发出CORS请求,JSON响应被记录到DevTools控制台。
目前不可能做你想做的事情,因为有一个允许CORS的服务器端白名单,而你的服务器不在白名单上。
目前在MediaWiki中没有无授权CORS的选项,因此白名单适用于所有CORS请求,无论它们是否包含授权。
参见https://phabricator.wikimedia.org/T62835和https://www.mediawiki.org/wiki/Manual:CORS
- Don'不允许将焦点集中在自动完成的选择上
- 覆盖在赢得'不允许点击下面的标记,谷歌地图api v3
- js文件未加载js控制台say's”;不允许加载本地资源”;
- Jquery不允许来自多个选择列表的相同值
- 飞行前响应中的访问控制允许标头不允许Angularjs请求标头字段访问控制允许标题
- 不允许在文本框中使用小数
- TinyMCE全屏不允许出现模式窗口
- 不允许在字段中输入不需要的字符
- 访问控制允许标头不允许X-Requested-Wise
- Chromium内联样式不允许正确的视图
- JQuery代码语法问题?(“不允许内联控制结构”)
- 正则表达式,不允许在javascript中使用负数和小数以及零
- 不允许输入或聚焦的输入类型文本
- $interval不允许我更新前端
- 不允许使用引导清单'组件'指令
- XMLHttpRequest无法加载url Origin访问控制允许Origin不允许null
- 正则表达式允许字母数字和空格,但不允许连续两个空格
- 谷歌地图 - 用户选择不允许位置
- 正则表达式在 JavaScript 中不允许
- 没有& # 39;Access-Control-Allow-Origin& # 39;头文件存在.因此,不允许访问Ori