欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

跨域的几种解决方案

程序员文章站 2022-04-15 14:05:45
...

关于跨域

JSONP

这个可能是好多人想到的第一解决方案了但是其实这个也有局限性

  • 需要前后端配合
  • 你可以实现跨域,别人也可以调用你的接口了

具体实现:
服务器端:
http://127.0.0.1:8081/test.php

<?php
 echo 'handler(' . json_encode(array('a' => 'b')) . ')'; //简单输出handler({a:b})

客户端:

一、动态加载script标签方式

    function setScript() {
        var script = document.createElement('script');
        script.setAttribute('src', 'http://127.0.0.1:8081/test.php?callback=handler');//callback指定回调函数名称
        document.querySelector("head").appendChild(script);
    }
setScript();//动态加载script
   //  处理函数
    function handler(data) {
        alert(data.a);
    }

二 、利用jQuery的ajax

   $.ajax({
            async: true,
            url: "http://127.0.0.1:8081/test.php",
            type: "GET",
            dataType: "jsonp", // 设置为JSONP方式
            jsonp: 'callback', //覆盖默认的 jsonp 回调参数名 callback
            jsonpCallback: 'handler', //回调函数名
            data: {
                q: "javascript",
                count: 1
            },
            success: function (response, status, xhr) {
                console.log(response);
            }
        });


        function handler(data) {
        alert(data.a);
        }

Nginx反向代理

利用Nginx反向代理把跨域的网址变成自己可以访问的地址,但是存在的问题在于

  • 请求安全性,可能请求到恶意代码
  • Nginx的设置设计到运维人员的设置,并非开发人员控制的

具体实现:

      location /getApi { 
            rewrite  ^/getApi/(.*)$ /$1 break;
            proxy_pass   http://127.0.0.1:8081;
      }

利用Chrome插件

在Chrome中利用沙盒可以进行跨域访问
具体实现
*,打开Google应用商店https://chrome.google.com/webstore/category/extensions?utm_source=chrome-ntp-icon
搜索CROS下载即可

后端开放访问

具体实现

header("Access-Control-Allow-Origin: http://XXXXXXXX.com ");