我是XHR的新手,正在尝试解决一个简单的用例。我有一个Web服务器,我的javascript将从中获取数据。但是,服务器不是为数据本身提供服务,而是将javascript XHR请求重定向到备用位置(例如亚马逊S3上的文件)以完成请求。
这让我进入了跨域XHR的世界,尽管我已经阅读了一些关于它的内容,但我甚至无法得到一个简单的例子。我将“Access-Control-Allow-Origin:*”添加到我的主域中的标题,该标题提供包含javascript的网页。但它不起作用。我错过了什么?无论浏览器如何,我都需要这个工作,所以我正在寻找初始服务器除了作为代理服务器之外可以做的事情,这会使请求卸载到S3失败。
test.php的代码如下:
<?php
header('Content-type: text/html');
header('Access-Control-Allow-Origin: *');
?>
<!DOCTYPE html>
<html>
<header>
<script type="text/javascript">
var request;
var url1 = "data/file.csv";
var url2 = "http://stackoverflow.com/users/1293955/ng-algo";
try
{
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari
request = new XMLHttpRequest();
}
else {
// code for IE6, IE5
request = new ActiveXObject('Microsoft.XMLHTTP');
}
// load data. 'false' indicates that further script
// is not executed until data is loaded and parsed
alert("Test1 with url: "+url1);
request.open('GET', url1, false);
request.send();
alert(request.responseText);
alert("Test2 with url: "+url2);
request.open('GET', url2, false);
request.send();
alert(request.responseText);
} catch (e) { alert("Exception: "+e.message); }
</script>
</header>
This is a test page
</html>
答案 0 :(得分:1)
对于任何任意请求(考虑到问题中混合使用Amazon和Stack Overflow),CORS可能不够,因为它实际上是必须提供权限的远程服务器。
要使第二个请求成功,stackoverflow.com
必须在其回复中包含相关的Access-Control-Allow-*
标题,以便您的网站向您的网站发出请求。在这种情况下,这些是否包含在响应中完全取决于Stack Exchange。
此外,通过在回复中加入Access-Control-Allow-Origin: *
,您实际上允许其他网站通过origin
请求您的网页。
您可能需要的是服务器上的“代理”脚本。你可以找到Ben Alman的通用解决方案:
允许:
request.open('GET', 'proxy.php?url=' + encodeURIComponent(url2), false);