美文网首页
php跨域处理 以及json、jsonp

php跨域处理 以及json、jsonp

作者: 宋大肿 | 来源:发表于2017-12-03 23:04 被阅读22次

    做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不是必须,因为是为了防止新浪输出一些奇怪的东西才加的。

    相关文章

      网友评论

          本文标题:php跨域处理 以及json、jsonp

          本文链接:https://www.haomeiwen.com/subject/pnnszttx.html