访问控制允许的起源不被允许

12 浏览
0 Comments

访问控制允许的起源不被允许

我看到了以下错误:

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 = ''+
    'My First API'+
    'First API'+
    'People'+
    'first, api';
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);

是什么原因导致这个错误,我该如何解决?

0
0 Comments

问题:Access Control Allow Origin not allowed by的出现原因是同源策略。解决方法是在localhost:8080上添加响应头

Access-Control-Allow-Origin: *

。可以通过在HTTP服务器上添加指令或通过服务器端代码(如PHP、Ruby等)添加头信息来实现。可以在https://developer.mozilla.org/en/http_access_control上了解更多关于跨域ajax请求的内容。需要注意的是,API或远程资源的服务器必须设置这个头信息,而不是API调用方。服务器配置决定了浏览器是否允许跨域资源的请求,浏览器执行同源策略,服务器告诉浏览器何时以及如何执行。服务器可以发送一条消息,告诉浏览器“好的,这次你可以让JavaScript看到响应”。这种设置可以防止恶意网站对私有URL发起意外请求。如果你不是服务器的所有者,作为API调用方可以创建自己的API作为代理,将请求转发到原始API。具体示例可参考stackoverflow.com/a/17098221/3380951中的PHP示例。

0
0 Comments

在使用JavaScript进行跨域请求时存在限制。以下是一些例子:

1. 你的域名是example.com,你想要向test.com发起请求 => 不允许

2. 你的域名是example.com,你想要向inner.example.com发起请求 => 不允许

3. 你的域名是example.com:80,你想要向example.com:81发起请求 => 不允许

4. 你的域名是example.com,你想要向example.com发起请求 => 允许

这是因为JavaScript受到“同源策略”的限制,以确保恶意脚本不能联系远程服务器并发送敏感数据。

JSONP是一种不同的使用JavaScript的方式。你发起一个请求,结果被封装到一个回调函数中,在客户端执行该函数。这与在HTML的头部部分链接一个新的脚本标签是一样的(你知道你可以从不同的域加载脚本)。但是,要使用JSONP,服务器必须正确配置。如果不是这种情况,你就不能使用JSONP,必须依靠服务器端的代理(PHP、ASP等)。有很多相关的指南,你可以通过谷歌搜索来找到。

谢谢!我不知道在同一主机但不同端口会发生这种情况。

我可以使用AmplifyJS来向不同的域发送请求吗?

我从未使用过AmplifyJS,所以我不知道。如果它只是一个JavaScript库(如jQuery),我非常怀疑你能够避免使用JSONP。如果它也有一个服务器部分,可能仍然有可能。对不起,我不能给出更多的答案。

JSONP只适用于GET请求吗?

在我的情况下,我试图在EF连接字符串中连接到不同的数据库,结果出现了CORS错误(ASP.NET Web API)。

0