当前位置: 首页 > 面试题库 >

使用PHP和Javascript通过CORS在站点之间实现跨域通信

东门清夷
2023-03-14
问题内容

经过几天的网络浏览并尝试了所有可能的事情,我才知道主机服务器存在问题。它已被我的主机服务器禁用。因此,我想到将代码发布在Stackoverflow上,这样,在SO上没有其他人会像我那样浪费时间。

该代码段可在IE,Safari,Mozilla和Chrome上正常运行。


问题答案:

客户端的Java代码

<script type='text/html" target="_blank">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

如果您在实施这些方法时遇到困难,请发表评论。您可以观看我在这里提到的现场演示



 类似资料:
  • 我在2个不同的私有子网中有2个EC2实例,都位于负载均衡器后面。我想通过域名https url在两个实例中的应用程序之间设置通信。我该怎么做?

  • 问题内容: 我是JSON新手,但是在PHP和javascript方面有很好的经验。问题很简单,答案可能更简单。我无法将数据从服务器上的PHP文件发送到本地的另一个PHP文件,该文件将从服务器接收JSON格式的数据。我究竟做错了什么? Javascript Frag(本地) PHP Frag(服务器@ xpal.com): $ users =新用户; 编辑: 错误消息:XMLHttpRequest无

  • 问题内容: 这似乎不起作用: 当我在jsfiddle上运行它时,将触发一个请求(根据Chrome调试工具),如下所示: 然后(根据Chrome调试工具)我的本地服务器返回以下标头: (手动重新格式化以提高可读性) 然后在控制台中,我收到如下错误消息: 但是标题与我的服务器响应预检请求时显示的标题相同。那么,我在这个难题中遗漏了什么? 问题答案: OHHHHH,好的,我终于明白了… 显然,飞行前响应

  • 问题内容: 如何通过JavaScript发送跨域POST请求? 注意-它不应该刷新页面,之后我需要抓取并解析响应。 问题答案: 如果你控制要发布的服务器,只需在服务器上设置响应头即可利用“跨域资源共享标准”。此答案在该主题的其他答案中进行了讨论,但我认为不是很清楚。 简而言之,这里是如何完成从from.com/1.html到to.com/postHere.php的跨域POST(以PHP为例)。注意

  • 问题内容: 我可以创建一个表单,然后使用它对任何站点发出POST请求,但FORM方法不是异步的,我需要知道页面何时完成加载。我尝试使用内置表单的iframe来解决这个问题,但没有成功。 有任何想法吗? 编辑 不幸的是,我无法控制响应数据,它从XML,json到简单文本不等。 问题答案: 您可以捕获的事件。将您的目标定位到iframe并监听加载。但是,您只能访问事件,而无法访问iframe的内容。

  • 本文向大家介绍通过jsonp获取json数据实现AJAX跨域请求,包括了通过jsonp获取json数据实现AJAX跨域请求的使用技巧和注意事项,需要的朋友参考一下 AJAX(异步的 JavaScript 和 XML)是用于创建快速动态网页的一种技术,它在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页,ajax 使用XMLHttpRequest对象在后台与服务器交换数据,XMLHttpR