我看到以下错误:
Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin
使用此代码:
var http = new getXMLHttpRequestObject();
var url = "http://gdata.youtube.com/action/GetUploadToken";
var sendXML = '<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"'+
'xmlns:media="http://search.yahoo.com/mrss/'+
'xmlns:yt="http://gdata.youtube.com/schemas/2007">'+
'<media:group><media:title type="plain">My First API</media:title>'+
'<media:description type="plain">First API</media:description>'+
'<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category>'+
'<media:keywords>first, api</media:keywords></media:group></entry>';
http.open("POST", url, true);
http.setRequestHeader("Authorization", "AuthSub token=" + AccessToken);
http.setRequestHeader("X-GData-Key", "key="+ dev_key);
http.setRequestHeader("Content-Type", "application/atom+xml; charset=UTF-8");
http.onreadystatechange = function() {
if(http.readyState == 4) {
alert(http.responseXML);
}
}
http.send(sendXML);
什么原因导致此问题,如何解决?
最佳答案
在当前域之外发出 ajax 请求时,Javascript 会受到限制。
- 示例 1:您的域名是 example.com,您想要向 test.com 发出请求 => 您不能。
- 示例 2:您的域名是 example.com,并且您想向 inner.example.com 发出请求 => 您不能。
- 示例 3:您的域名是 example.com:80,并且您想向 example.com:81 发出请求 => 不能
- EX 4:您的域名是 example.com,您想向 example.com 发出请求 => 可以。
出于安全原因,Javascript 受到“同源策略”的限制,因此恶意脚本无法联系远程服务器并发送敏感数据。
jsonp是使用 javascript 的另一种方式。您发出请求,结果被封装到在客户端中运行的回调函数中。这与将新的脚本标记链接到 html 的 head 部分相同(您知道您可以从与您所在域不同的域加载脚本)。
但是,要使用 jsonp,必须正确配置服务器。如果不是这种情况,则无法使用 jsonp,并且必须依赖服务器端代理(PHP、ASP 等)。有很多与此主题相关的指南,只需 google 即可!
关于javascript - 为什么我在这里看到 "origin is not allowed by Access-Control-Allow-Origin"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28853654/