首页 » SEO优化 » 解决跨域php技巧_跨域解决筹划

解决跨域php技巧_跨域解决筹划

duote123 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

• 前期准备

用WAMP搭建两个站点分别:http://www.example.comhttp://api.example.com,很显然第一个站点是主站点,第二个站点是供应做事的站点(当然我们在实际的架构上也是这种办法,我们还可以为供应静态资源专门配置一个站点诸如:http://assets.example.com )。

解决跨域php技巧_跨域解决筹划

• JSONP办理GET跨域

解决跨域php技巧_跨域解决筹划
(图片来自网络侵删)

关于跨域问题涌现的,是由于浏览器 同源策略 ,本文就不一一概述了这里紧张讲干货,JSON和JSONP实在就像Java和JavaScript的差异,你可以理解为雷锋和雷锋塔的差异,JSONP是我们程序猿想出的跨域的办理方案,跟JSON没有办毛线的关系,我们先举一个普通易懂的栗子:

首先在 http://api.example.com 域下新建一个文件:get_user_info.php,其内容

12$user_info = '{ \公众name\"大众: \"大众张三\"大众, \"大众age\"大众: \"大众18\"大众 }';echo \"大众get_user_info($user_info)\"大众;

然后在 http://www.example.com 域下创建一个文件:index.html,其内容

123456<script> function get_user_info(data) { console.log(data); }</script><script src=\公众http://api.example.com/get_user_info.php\"大众></script>

末了我们可以看到掌握台输出的结果。
实在这便是一个最根本的JSONP跨域,很显然我们利用了script标签发送GET要求,实在jQuery的实现也是采取这种办法,须要把稳的是JSONP只支持GET要求。

1234567$.ajax({ url: 'http://api.example.com/get_user_info.php', dataType: 'jsonp', jsonpCallback: 'get_user_info'}).done(function (data) { console.log(data);});

• 设置Access-Control-Allow-Origin相应头

显然JSONP只支持GET要求,那么对付POST要求它就无能为力了,这个时候我们须要在做事端配置相应头Access-Control-Allow-Origin,并且添加许可跨域的域名

123header('Access-Control-Allow-Origin: http://www.example.com');$user_info = '{ \"大众name\"大众: \公众张三\公众, \"大众age\"大众: \"大众18\"大众 }';echo $user_info;

须要把稳的是相应头许可跨域的域名结尾不要加‘/’,诸如 header('Access-Control-Allow-Origin: http://www.example.com/'); ,如果须要许可跨多个域名需如下配置

1234567$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array('http://www.example.com', 'http://www.example2.com');if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); }

通过设置Access-Control-Allow-Origin相应头实现跨域,GET/POST要求办法都能够实现。

• Apache反向代理

步骤一

配置Apache的httpd.conf文件,取消如下注释

1234LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule proxy_http_module modules/mod_proxy_http.so

步骤二

配置httpd-vhosts.conf文件

12345678<VirtualHost :80> DocumentRoot \"大众D:/workspace/tech/www.example.com\"大众 ServerName www.example.com ##反向代理设置 ProxyPass /action http://api.example.com/action ProxyPassReverse /action http://api.example.com/action</VirtualHost>

步骤三

修正主站index.html文件,把稳此时不要添加 http://api.example.com 这个域名前缀,由于我们做了反向代理,当我们访问 http://www.example.com/action/get_user_info.php,实在便是访问http://api.example.com/action/get_user_info.php

1234567$.ajax({ url: 'action/get_user_info.php', dataType: 'jsonp', jsonpCallback: 'get_user_info'}).done(function (data) { console.log(data);});

总结

本文先容了三种最根本的跨域办理方案,无非便是JSONP、设置Access-Control-Allow-Origin相应头和反向代理代理这几种办法,个人以为反向代理办法最简洁省事儿,只须要在做事器端配置即可。
而别的两种都须要通过程序办法,相对来说开拓本钱较大。
当然跨域的办理方法还有很多,诸如postMessage、iframe、PHP中curl和flash等等,这里面也有较多的坑,比如异步跨域要求在低版本的IE下须要用XDomainRequest工具来实现。

标签:

相关文章

介绍百度网盘,云端存储时代的创新先锋

随着互联网技术的飞速发展,云计算已经成为现代生活不可或缺的一部分。而在这其中,百度网盘作为国内领先的云存储服务提供商,以其卓越的性...

SEO优化 2025-01-03 阅读3 评论0

介绍监控屏蔽技术,守护个人隐私的利器

随着科技的发展,监控设备已经深入到我们生活的方方面面。在享受便利的隐私安全问题也日益凸显。如何有效屏蔽监控,保护个人隐私,成为人们...

SEO优化 2025-01-03 阅读3 评论0

介绍番号观看方法,轻松驾驭影视世界

随着互联网的普及,网络影视资源日益丰富,番号作为影视作品的标识码,已经成为广大观众了解、搜索和观看影视作品的重要途径。如何正确地使...

SEO优化 2025-01-03 阅读1 评论0

介绍盗微信号黑幕,网络安全的严峻挑战

在数字化时代,微信已成为人们生活中不可或缺的通讯工具。随着微信用户数量的激增,盗微信号的事件也日益增多。本文将深入剖析盗微信号的方...

SEO优化 2025-01-03 阅读1 评论0