如果我有服务器:
www.server1.com
从以下位置加载脚本:
www.server2.com/script-to-load.js
script-to-load.js可以对www.server2.com进行ajax调用吗?
感谢。
答案 0 :(得分:3)
是。有三种方法可以做到这一点:
CORS:使用此方法,标题会添加到www.server2.com,允许从www.server1.com访问。这是在JavaScript中进行跨域脚本编写的“正确”方法。请参阅:http://www.w3.org/TR/cors/
使用服务器端“代理”:使用此方法,www.server1.com上的服务器端脚本访问www.server2.com上的文件并返回响应。这是一种实用的方法,可以从您控制的服务器上的网站访问您无法控制的服务器上的数据。下面是一个示例脚本。
JSONP:此方法利用了script
标记免于跨域限制的事实。请参阅:http://en.wikipedia.org/wiki/JSONP
用于跨域脚本编写的示例PHP“代理”脚本:
执行选项2的示例PHP脚本是:
<?php
ini_set("user_agent", $_SERVER['HTTP_USER_AGENT']); // temporarily override CURLs user agent with the user's own
echo file_get_contents($_REQUEST["www"]);
?>
将此脚本放在www.server1.com/proxy.php并致电http://www.server1.com/proxy.php?www=http://www.server2.com/ajax.js。该脚本将返回www.server2.com/ajax.js的内容,从而绕过跨域限制。
答案 1 :(得分:2)
没有
Javascript没有关于代码来自何处的概念。
仅根据正在执行脚本的文档应用同源策略。
答案 2 :(得分:2)
如果这是服务器端JS(您说服务器正在加载脚本),则服务器端JS中没有相同的源限制。浏览器实现了同源限制,并影响浏览器中运行的脚本。
此外,在浏览器中,脚本的来源并不重要。浏览器查看网页的来源,并将ajax调用(由页面中的任何脚本生成)限制到网页的域。脚本可以来自任何地方,它们的来源不会影响基于浏览器的相同来源对页面本身来源的限制。
Here是基于浏览器的同源限制的一个很好的参考。