尽管Access Control Allow Origin标头存在问题,但跨域XHR失败
Cross Domain XHR failing inspite of Access-Control-Allow-Origin header
我是XHR的新手,正在尝试解决一个简单的用例。我有一个网络服务器,我的javascript可以从那里获取数据。但是,服务器不会为数据本身提供服务,而是将javascript XHR请求重定向到另一个位置(例如亚马逊S3上的文件)以满足请求。
这让我进入了跨域XHR的世界,尽管我读了一些关于它的知识,但我甚至无法获得一个简单的例子。我正在我的主域中的标题中添加"Access Control Allow Origin:*",该标题为包含javascript的网页提供服务。但它不起作用。我错过了什么?无论浏览器如何,我都需要这一点,所以我正在寻找初始服务器可以做的事情,而不是充当代理,这会破坏将请求卸载到S3的目的。
- Chrome:在第二次呼叫
- IE:显示警告,但在之后打开第二个url确认
- Firefox:只在第二条上说"异常:Faliure"呼叫
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>
对于任何任意请求(考虑到问题中Amazon和Stack Overflow的混合),CORS可能还不够,因为它实际上是必须授予权限的远程服务器。
要使第二个请求成功,stackoverflow.com
必须在其响应中包含相关的Access-Control-Allow-*
标头,以允许您的网站进行请求。在这种情况下,这些是否包含在响应中完全取决于Stack Exchange。
此外,通过在响应中包含Access-Control-Allow-Origin: *
,您实际上允许其他网站从其origin
请求您的页面。
您可能需要的是服务器上的"代理"脚本。你可以从Ben Alman那里找到一个广义的解决方案:
- http://benalman.com/projects/php-simple-proxy/
- https://github.com/cowboy/php-simple-proxy
这将允许:
request.open('GET', 'proxy.php?url=' + encodeURIComponent(url2), false);
相关文章:
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- JsFiddle在分叉后描述失败
- 中止POST XHR可靠
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 当一些承诺失败时,如何继续使用$q.all()
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 在Jquery中单击传播失败
- 网页上失败的javascript会导致所有其他脚本失败
- Dojo XHR将200 OK视为错误
- zombie.js-xhr-json总是失败
- 一个iframe随机失败到XHR
- Windows 应用商店应用程序 xhr 到 localhost 失败
- 尽管Access Control Allow Origin标头存在问题,但跨域XHR失败
- 服务器返回重定向(302)后,iOS设备上的AJAX或XHR请求失败,代码为0
- XHR加载失败:POST
- 带有上载进度和重定向的XHR CORS请求失败
- HTML5上传通过XHR在Chrome浏览器失败
- XHR发布请求因CORS而失败
- Chrome扩展中的Cross Origin XHR失败
- XHR 加载失败:开机自检