javascript - 远程脚本可以向托管脚本的服务器发出请求吗?同源政策

标签 javascript html http

如果我有服务器:

www.server1.com

从以下位置加载脚本:

www.server2.com/script-to-load.js

script-to-load.js 可以对 www.server2.com 进行 ajax 调用吗?

谢谢。

最佳答案

是的。可以通过三种方式做到这一点:

  1. CORS:使用此方法,将 header 添加到 www.server2.com 以允许从 www.server1.com 进行访问。这是在 JavaScript 中执行跨域脚本的“正确”方法。请参阅:http://www.w3.org/TR/cors/

  2. 使用服务器端“代理”:使用此方法,www.server1.com 上的服务器端脚本访问 www.server2.com 上的文件并返回响应.这是一种从您控制的服务器上的网站访问不受您控制的服务器上数据的实用方法。下面是一个示例脚本。

  3. 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 的内容,从而绕过跨域限制。

关于javascript - 远程脚本可以向托管脚本的服务器发出请求吗?同源政策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11586204/

相关文章:

javascript - Angular 2 : Type 'Subscription' is not assignable to type

web-services - 保护 Jersey REST 服务的最安全方式

javascript - 回调后 Angular2 变化检测不起作用

javascript - 为什么在点击事件后要弹出几次警告?

javascript - Orbit 不显示 - zurb foundation V5

javascript - Jquery Html 元素选择器

javascript - 如何使用 JavaScript 以编程方式选择 HTML 选项?

javascript - 发出多个异步请求并获取它们的返回值

html - 跨度和 anchor 位置显示问题 - 在 li 标签内

javascript - header 中包含文件数据的发布请求。好的做法吗?