Zol*_*idt 13 javascript ajax jquery xmlhttprequest cors
我尝试向GET
jQuery AJAX请求中的某个链接发送一个简单的请求.
这是一个非常简单的:
$.ajax({
type: 'GET',
url: /* <the link as string> */,
dataType: 'text/html',
success: function() { alert("Success"); },
error: function() { alert("Error"); },
});
Run Code Online (Sandbox Code Playgroud)
然而,无论我尝试过什么,我都得到了 XMLHttpRequest cannot load <page>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:7776' is therefore not allowed access.
我什么都试过,从加入header : {}
定义的AJAX请求设置dataType
到JSONP
,甚至text/plain
,用的,而不是简单的jQuery AJAX,甚至下载一个插件,使CORS -但没有什么能帮上忙.
如果我试图访问任何其他网站,也会发生同样的情况.
有关正确和简单解决方案的任何想法?有没有?
这是设计的.您不能使用XMLHttpRequest向另一台服务器发出任意HTTP请求,除非该服务器通过为请求主机发出Access-Control-Allow-Origin标头来允许它.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
您可以在脚本标记中检索它(对脚本和图像以及样式表没有相同的限制),但除非返回的内容是脚本,否则它对您没有多大帮助.
这是一篇关于CORS的教程:
这样做是为了保护最终用户.假设图像实际上是一个图像,样式表只是一个样式表,而脚本只是一个脚本,从另一个服务器请求这些资源实际上不会造成任何伤害.
但总的来说,跨域请求可以做很糟糕的事情.说你,Zoltan,正在使用coolsharks.com.另请注意,您已登录mybank.com并且浏览器中有mybank.com的cookie.现在,假设coolsharks.com向mybank.com发送了一个AJAX请求,要求将所有资金转入另一个帐户.因为您存储了mybank.com cookie,所以他们成功完成了请求.所有这些都是在您不知情的情况下发生的,因为没有发生页面重新加载.这是允许一般跨站点AJAX请求的危险.
如果要执行跨站点请求,您有两种选择:
要么
在(1)中,您必须与您要求的服务器合作,并且在(2)中,您必须控制最终用户的浏览器.如果你不能满足(1)或(2),你几乎没有运气.
但是,还有第三种选择(charlietfl指出).您可以从您控制的服务器发出请求,然后将结果传回页面.例如
<script>
$.ajax({
type: 'GET',
url: '/proxyAjax.php?url=http%3A%2F%2Fstackoverflow.com%2F10m',
dataType: 'text/html',
success: function() { alert("Success"); },
error: function() { alert("Error"); }
});
</script>
Run Code Online (Sandbox Code Playgroud)
然后在您的服务器上,最简单的:
<?php
// proxyAjax.php
// ... validation of params
// and checking of url against whitelist would happen here ...
// assume that $url now contains "http://stackoverflow.com/10m"
echo file_get_contents($url);
Run Code Online (Sandbox Code Playgroud)
当然,这种方法可能遇到其他问题:
我确定还有其他人.但如果这些问题都没有阻止它,那么第三种方法可以很好地工作.
归档时间: |
|
查看次数: |
56297 次 |
最近记录: |