javascript - 为什么我在这里看到 "origin is not allowed by Access-Control-Allow-Origin"错误?

标签 javascript ajax cors xmlhttprequest youtube-api

我看到以下错误:

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/

相关文章:

JavaScript/PHP 字符串相等

image - 跨源资源共享 header 不适用于 safari

javascript - 哪个更安全 - iframe 或 CORS - 用于创建用于嵌入第 3 方网站的小部件?

javascript - 在 Google App Engine 服务器中实现 CORS

javascript - 使用vue-resource时TypeError : t. replace is not a function错误

php - 使用 php/mysql/jQuery 随机聊天

javascript - 签名板和dompdf

javascript - 填充 HTML 下拉列表 onclick

javascript - 为什么我不能创建一个 void 箭头函数?

javascript - 手机网站测试 : Emulators vs Real Devices