gpt4 book ai didi

php - 用JavaScript代替跨域请求

转载 作者:行者123 更新时间:2023-12-04 02:27:15 24 4
gpt4 key购买 nike

我在名为 kopernikus.science.net 的服务器上有一个 JavaScript,它想要访问另一个名为 galileo.science.net 的服务器上的文件。这是我的想法的玩具示例:

code residing on  http://kopernikus.science.net/makecalendar.js :

var request = new XMLHttpRequest();
request.open("GET","galileo.science.net/calendar", false);
request.send(null);
document.getElementById("calendar").innerHTML =
"<div>" + request.responseText.split('\n')[0] + "</div>";

不幸的是,由于现代网络浏览器的“同源策略”,脚本被禁止访问不同域上的数据。

当然,我的问题是:

How can I access the remote file anyway?

Solutions outside JavaScript are allowed, like mirroring the file in question or tweaking .htaccess. What are my options? Which require the least amount of permissions on the web server?

有问题的文件是一个定期更改的 vcalendar 格式的日历。我在共享主机上并且没有系统管理员权限,但我可以运行 PHP 和 CGI​​ 脚本并且可以更改 .htaccess 文件的某些部分。

最佳答案

一些选项:

  1. 如果您控制服务器并且您的用户将使用最新的网络浏览器,您可以使用 CORS .遗憾的是,IE7 或更低版本不支持 CORS。在 IE8 中,它在那里,但你必须使用 XDomainRequest而不是 XMLHttpRequest(其他浏览器,如 Chrome 和 Firefox,使用 XMLHttpRequest 完全透明地处理 CORS)。
  2. 如果没有,你可以使用JSONP ,适用于所有浏览器。
  3. 您可以使用 document.domain指定这两个页面(如果它们确实是同一 science.net 域的子域)具有相同的来源。这在浏览器中运行良好,但它的缺点是您必须首先将目标文档加载到窗口(可能是隐藏的 iframe)中才能访问它,因为目标文档必须设置document.domain(表示愿意与你合作)
  4. 对于公共(public)内容,另一种选择是 using YQL as a proxy .
  5. 如果所有这些都失败了,你唯一真正的选择是在你查询的服务器上有一个代理脚本,然后使用服务器端代码从另一个域查询资源(因为此限制仅适用于客户端)。

这些大致按照我使用它们的顺序列出。例如,如果您控制服务器并且知道您的客户将使用最新的浏览器,则使用 CORS;如果没有,请查看 JSONP(尽管从您下面的评论来看,您可能做不到);如果两者都不是,也许 document.domain 就是答案;等等,等等,在列表中找到最后的选择(代理)。

关于php - 用JavaScript代替跨域请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com