【问题标题】:Implementing cross domain communication between sites through CORS using PHP and Javascript使用 PHP 和 Javascript 通过 CORS 实现站点之间的跨域通信
【发布时间】:2012-08-11 10:41:56
【问题描述】:

在浏览网页并尝试了所有可能的事情后,我开始知道我的主机服务器存在问题。它被我的主机服务器禁用。所以,我想在 Stackoverflow 上发布我的代码,这样,SO 上的其他人就不会像我一样浪费时间。

代码 sn-p 在 IE、Safari、Mozilla 和 Chrome 上运行良好。

【问题讨论】:

  • 您的主机服务器禁用了什么?有什么问题?
  • 我不太清楚,它是如何被阻止的。但是我的服务提供商证实他们不支持这一点,后来证明,当同一个 sn-p 在不同的服务器上工作时。 enable-cors.org 上的文章还讲述了如何检查它是否在您的服务器上启用。这证明它可以被禁用,但不知道如何。如果您能猜到相同的原因,请赐教。
  • 那么,如果相同的代码适用于其他服务器,还有什么问题?
  • @Esailija 那么它与服务器有关吗?因为该服务器上的所有请求都被服务器简单地取消了
  • @PrashantSingh 如果服务器不接受请求,可能是服务器配置错误。

标签: php javascript ajax cross-domain cors


【解决方案1】:

客户端的Javascript代码

<script type='text/javascript'>

// function for making an object for making AJAX request

function getXMLHTTPRequest() {
try {
req = new XMLHttpRequest();
} catch(err1) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch (err2) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (err3) {
req = false;
}
}
}
return req;
}

var http899 = getXMLHTTPRequest();
function searchFabIndia() {

var myurl = "http://my2nddomain.com/yebhi.php";
myRand = parseInt(Math.random()*999999999999999);
var modurl = myurl+"?rand="+myRand;
http899.open("GET", modurl, true);
http899.onreadystatechange = useHttpResponse899;
http899.send(null);
}

function useHttpResponse899() {
if (http899.readyState == 4) {
if(http899.status == 200) {
 // do all processings with the obtained values / response here
}
}
}

</script>

<body onload='searchFabIndia();'>

服务器端所需的部分代码。您需要设置可以请求页面内容、允许方法和标题的来源(推荐人)。这些设置可以存储在 .htaccess 文件中,用于您发出请求的第二个域上的所有文件,或者,您可以将它们放在您的特定 PHP 文件中,如下所示:-

    <?php
        header("Access-Control-Allow-Origin: *");
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
        header("Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control");
        header("Access-Control-Max-Age: 18000");
// Put it in your PHP file
    ?>

或者,您可以通过在 .htaccess 文件中提及相同的内容来为整个域/子域一起指定这些设置,如下所示:-

<IfModule mod_headers.c>
   <FilesMatch "\.(php)$">
    Header set Access-Control-Allow-Origin: *
    Header set Access-Control-Allow-Methods : POST,GET,OPTIONS,PUT,DELETE
</FilesMatch>
  </IfModule>

并非所有引用者的通配符允许有时是不必要的,因此,在这种情况下,您可以通过命名来指定特定的域/子域,每个域/子域用逗号(,)分隔,如图所示

Header set Access-Control-Allow-Origin: http://abc.com,http://def.com,http://ghi.com 

如果您在实施其中任何一项时遇到困难,请发表评论。你可以看到我提到的现场演示here

【讨论】:

  • 你不能在useHttpResponse899()的范围内使用http899
  • 对不起,我的错,应该不在那个功能范围内!检查新的解决方案!
  • 那么这是否绕过了你主机的限制?
  • 这是否包含在 jQuery $.ajax 中?
  • @JoeCoderGuy 实现 CORS 并不取决于您如何实现 ajax 请求,而是取决于您的服务器配置。 Ajax 请求与普通的 ajax 请求完全相同,只有您希望访问的文件应具有所需的权限。你到底面临什么问题?
猜你喜欢
  • 1970-01-01
  • 2013-02-10
  • 2011-03-12
  • 2012-11-16
  • 1970-01-01
  • 2015-05-20
  • 2010-09-07
  • 2019-11-06
  • 1970-01-01
相关资源
最近更新 更多