【发布时间】:2016-01-10 18:05:13
【问题描述】:
我有一个网站(wagtail CMS)在域:8000 的 AWS 上运行,我的 API 在域:8801 上运行
在我的网页上,我尝试使用 JS 从 API 获取一些信息(Access-Control-Allow-Origin 标头在 API 中正确设置,它是一个基于 django 的应用程序)
不幸的是,无论我尝试访问什么,以下代码都只返回 xhr.status = 0 和空的 responseText。
当我将 domain:8000 放在 xhr.open('GET','http://domain:8000',true) 时,一切正常,我看到了我的 html 代码。
function load() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://domain:8801/api/', true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.send();
if (xhr.status != 200) {
alert( "ERR" ); --always ERR in browser
}
else {
alert( "SUCCESS" );
}
}
在 API 端,我在服务器控制台中看到了我的所有请求,status=200。
【问题讨论】:
-
同源策略规定协议、域和端口必须匹配,所以这里没有意外,它不应该工作,这是一种安全措施。
-
Access-Control-Allow-Origin 不允许绕过吗?
-
@arjabbar - 如果设置正确,它应该,但看到它使用相同的端口,而不是不同的端口,它可能设置不正确。
-
@adeneo 当我将 url 更改为 google.com 时,这是我在 chrome 控制台中看到的:XMLHttpRequest cannot load google.com。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'domain:8000' 不允许访问。响应的 HTTP 状态代码为 405。我的 url 是空的
标签: javascript ajax django amazon-web-services