如果我有服务器:
www.server1.com
从以下位置加载脚本:
www.server2.com/script-to-load.js
script-to-load.js 可以对 www.server2.com 进行 ajax 调用吗?
谢谢。
如果我有服务器:
www.server1.com
从以下位置加载脚本:
www.server2.com/script-to-load.js
script-to-load.js 可以对 www.server2.com 进行 ajax 调用吗?
谢谢。
不。
Javascript 不知道一段代码的来源。
同源策略仅适用于执行脚本的文档。
是的。有三种方法可以做到这一点:
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 的内容,从而绕过跨域限制。
如果这是服务器端 JS(你说服务器正在加载脚本),那么服务器端 JS 没有同源限制。同源限制由浏览器实现,并影响在浏览器中运行的脚本可以执行的操作。
此外,在浏览器中,脚本来自何处并不重要。浏览器查看网页的来源,并将 ajax 调用(由页面中的任何脚本进行)限制在网页的域中。脚本可以来自任何地方,并且它们的来源不会影响基于浏览器的同源限制页面本身的来源。
这是关于基于浏览器的同源限制的一个很好的参考。