【发布时间】:2015-08-09 18:15:25
【问题描述】:
我需要进行跨子域请求。有一个经典的 asp 站点,它为我的 PL/SQL Oracle 网页创建了一个XMLHttpRequest。
asp站点有域:test/site.asp,PL/SQL网页有域test:7779/site...所以顶级域是一样的
这是我的 XmlHttpRequest:
var xmlHttp = null;
xmlHttp = new XMLHttpRequest();
xmlHttp.onload = function() {
if (xmlHttp.readyState === 4) {
if (xmlHttp.status === 200) {
createChart(divID, xmlHttp.responseText, counter);
} else {
console.error("error");
}
}
};
xmlHttp.open( "GET", theUrl);
xmlHttp.setRequestHeader( "pragma", "no-cache" );
xmlHttp.send( null );
在 IE11 中没有出现错误,但在 Chrome 中:
XMLHttpRequest 无法加载 http://test:7779/site 请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此,不允许访问 Origin 'http://test'。 响应具有 HTTP 状态代码 501。是否有解决跨子域请求的方法?也许在我的 asp 站点中使用 iframe 来获取内容?
更新:
我知道尝试将两边的document.domain 设置为相同:测试。但这也没有解决问题。
【问题讨论】:
-
顶级域不一样,因为它们在不同的端口上运行,在顶级你有
http://test:80和http://test:7779,它们是不等价的。 -
一种技术(也用于劫持页面)是注入一个
<script src=".."></script>标签,它将数据作为javascript脚本加载。但是随后您将不得不修改响应以充当 javascript 代码/函数(类似于 pjax)。请注意,这些技术也被用于劫持网站中的 JSON 响应 -
1.停止设置自定义请求标头。这会强制进行预检请求。或 2. 让服务器在响应中发回适当的
Access-Control-Allow-Origin标头 -
@Lankymart 在不同端口上运行意味着它们在完全不同的域上运行(根据请求)?
标签: javascript oracle asp-classic xmlhttprequest