php跨域处理 以及json、jsonp

做web肯定会遇到跨域的问题,关于跨域的概念不作过多描述,但需要了解的是跨域是前端的概念(虽然需要后端的配合,但由头是前端)。

下文将一般跨域的处理方式做个记录。

1.header()

在php代码文件中设置:

<?php 
  header("Access-Control-Allow-Origin:*");  

告诉浏览器,我这个数据是随便谁都能进行访问的,不管是GET还是POST。
本方式表示:无论谁、无论什么方式,都来吧。

2.header()

第一种方式,太随便了,觉得不安全,可以使用本方法。

<?php  
$URL="发起请求的页面url地址";
header("Access-Control-Allow-Origin:".$URL);  

那么就表示,我的数据,只有$URL表示的地址值,能进行访问请求,其他的 sorry get out please。
我们还可以进一步约束:

header("Access-Control-Allow-Method:POST/GET");  

一起使用,代表本数据只能是特定URL特定请求方式才能正确得到相关结果。 (还是注意,文档里面要写清楚)

3.JSONP

这个可能会使用得比较多一点,至少用起来爽一些。
因为浏览器同域规则的限制,不能获得其他不同域的数据。
但是,总有例外:

  1. <img src="">
  2. <script>
  3. <link>
  4. <iframe>

以上标签,不受浏览器同域规则限制。

jsonp原理,利用了<script>标签。

<script>
function func(data){
  ///your code
}
</script>
<script type="text/javascript" src="http://heyc.applinzi.com/mytest.php?callback=func"></script>

这是我本地localhost请求我在新浪sae云应用的jsonp方式,我们看到代码中,src指向的是一个php文件,这个是合法的,浏览器会将得到的内容当成是JS文件来进行解释和执行。注意以上代码的顺序。
那么作为被请求的服务端PHP代码如下:

<?php  
header("Content-type: ");
$option=$_REQUEST["func"];//保证post/get都可以  
echo $option."({'name':'xxx'})";//输出

以上就是实现jsonp的方式,第一句Header不是必须,因为是为了防止新浪输出一些奇怪的东西才加的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 由于浏览器的同源策略保护机制,浏览器不能执行来自其他来源的脚本。通过js在不同的域之间进行数据传输或通信,比如用a...
    威少_吴阅读 1,402评论 0 2
  • 1.什么是同源策略 1.要了解同源策略,我们必须先知道源即orgin 以百度页面为例,谷歌浏览器打开控制台:输入l...
    GarenWang阅读 1,471评论 2 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,937评论 18 139
  • Asynchronous JavaScript and XML (Ajax) 是驱动新一代 Web 站点(流行术语...
    张玉帅阅读 1,015评论 0 3
  • 和一个朋友聊天,了解了她看似美满的生活中实际上存在着很多的问题,主要是夫妻之间的,导致生活过的寡淡无味,而且夫妻二...
    瀞知阅读 238评论 0 0