美文网首页人生几何?
跨域解决方案(史上最易懂)

跨域解决方案(史上最易懂)

作者: 曲昶光 | 来源:发表于2021-09-17 21:26 被阅读0次

跨域总结

1.跨域思路

跨域解决方案一般分为两种:前端解决,后端解决

1.1 前端解决方案

通过前端解决的思想就是,通过设置中间件把跨域的请求转发一下,其实就是反向代理,
比如 http://1.2.3.4:8099 想要访问豆瓣的接口 http://www.douban.com/v?a=1很...
会有跨域问题,但是如果请求的是http://1.2.3.4:8099/api/v?a=1 就不存在跨域

反向代理就是截取 /api 之后的请求 转发到http://www.douban.com/ 服务器上

  1. vue react等项目 可以使用 http-proxy-middleware
  2. 普通项目 就是以下介绍的 本地安装nginx 反向代理跨域

1.2 后端解决方案

后端解决方案,一般是需要后端参与

  1. jsonp 回调函数
  2. CORS 需要后端加头部 但并不是所有浏览器都支持

2.本地配置nginx解决跨域

2.1 mac/vmware/设置共享文件

  1. 在虚拟机上找到设置,选择共享文件夹

  2. mac vmware想使用共享文件必须安装vmware-tools

    2.1 在虚拟机关闭状态下,选择虚拟机,安装vmware-tools
    2.2 在ubuntu中直接使用 apt 安装 之后会介绍

  3. 安装vmware-tools之后查看 mnt文件下是否有hgfs文件

    3.1 有hgfs说明已经有共享文件的挂载点
    3.2 如果没有hgfs文件 说明安装的vm-tools可能和ubuntu版本有冲突

  4. 设置共享目录

# 查看当前设置的共享文件
#sudo vmware-hgfsclient

# 上述命令可能由于没有安装包报错,所以先安装一下包
# apt-get install open-vm-tools
# apt-get install open-vm-tools-desktop
# apt-get install open-vm-tools-dkms

# 自己手动创建hgfs并挂载
# mkdir /mnt/hgfs
# vmhgfs-fuse .host:/ /mnt/hgfs

# 使用文件查看是否有权限进入 /mnt/hgfs 如果没有使用一下命令
# sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o nonempty

# 每次进入系统都需要自己mount 可以配置/etc/fstab

.host:/    /mnt/hgfs       vmhgfs     defaults  0  0 

完成以上步骤,你会发现 /mnt/hgfs/XXX XX 为你设置的共享目录

2.2 配置nginx

2.2.1 修改nginx默认服务器根目录

修改配置文件位置:vim /etc/nginx/sites-available/default

    # 配置共享文件的位置
    root /mnt/hgfs/ftp;

    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
}

2.2.2 访问http://XXX 查看配置是否生效(403错误)

403错误可能有两种情况,不要误以为真的没有权限

  1. 配置的共享文件下是否有indx.html,没有的话会报错403 Forbidden
  2. 真的没有权限 需要修改一下配置 chrod 修改权限

解决Nginx出现403 forbidden

相当良心的解决方案

2.2.3 配置反向代理

我用的豆瓣随便的一个接口来测试的

    # 重写
    rewrite  ^.+api/?(.*)$ /$1 break;
    # 配置代理
    proxy_pass   https://api.douban.com;
}

2.3 测试跨域

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="jquery.js"></script>
    <title>Title</title>
</head>
<body>
<div>
    <button id="btn1">测试跨域</button>
    <div id="content"></div>
</div>
<script type="text/javascript"> $(document).ready(function () {
        $("#btn1").click(function () {
            // 所有豆瓣请求都以 /api 开始  注意相对绝对路径
            $.get("/api/v2/book/1220562", function (data, status) {
                alert("数据: " + JSON.stringify(data) + "\n状态: " + status);
                $("#content").html(JSON.stringify(data))
            });
        });
    }); </script>
</body>
</html>

2.4 浏览器测试跨域,跨域成功

跨域总结

1.跨域思路

跨域解决方案一般分为两种:前端解决,后端解决

1.1 前端解决方案

通过前端解决的思想就是,通过设置中间件把跨域的请求转发一下,其实就是反向代理,
比如 http://1.2.3.4:8099 想要访问豆瓣的接口 http://www.douban.com/v?a=1很...
会有跨域问题,但是如果请求的是http://1.2.3.4:8099/api/v?a=1 就不存在跨域

反向代理就是截取 /api 之后的请求 转发到http://www.douban.com/ 服务器上

  1. vue react等项目 可以使用 http-proxy-middleware
  2. 普通项目 就是以下介绍的 本地安装nginx 反向代理跨域

1.2 后端解决方案

后端解决方案,一般是需要后端参与

  1. jsonp 回调函数
  2. CORS 需要后端加头部 但并不是所有浏览器都支持

2.本地配置nginx解决跨域

2.1 mac/vmware/设置共享文件

  1. 在虚拟机上找到设置,选择共享文件夹

  2. mac vmware想使用共享文件必须安装vmware-tools

    2.1 在虚拟机关闭状态下,选择虚拟机,安装vmware-tools
    2.2 在ubuntu中直接使用 apt 安装 之后会介绍

  3. 安装vmware-tools之后查看 mnt文件下是否有hgfs文件

    3.1 有hgfs说明已经有共享文件的挂载点
    3.2 如果没有hgfs文件 说明安装的vm-tools可能和ubuntu版本有冲突

  4. 设置共享目录

#sudo vmware-hgfsclient

# 上述命令可能由于没有安装包报错,所以先安装一下包
# apt-get install open-vm-tools
# apt-get install open-vm-tools-desktop
# apt-get install open-vm-tools-dkms

# 自己手动创建hgfs并挂载
# mkdir /mnt/hgfs
# vmhgfs-fuse .host:/ /mnt/hgfs

# 使用文件查看是否有权限进入 /mnt/hgfs 如果没有使用一下命令
# sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o nonempty

# 每次进入系统都需要自己mount 可以配置/etc/fstab

.host:/    /mnt/hgfs       vmhgfs     defaults  0  0 

完成以上步骤,你会发现 /mnt/hgfs/XXX XX 为你设置的共享目录

2.2 配置nginx

2.2.1 修改nginx默认服务器根目录

修改配置文件位置:vim /etc/nginx/sites-available/default

    # 配置共享文件的位置
    root /mnt/hgfs/ftp;

    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
}

2.2.2 访问http://XXX 查看配置是否生效(403错误)

403错误可能有两种情况,不要误以为真的没有权限

  1. 配置的共享文件下是否有indx.html,没有的话会报错403 Forbidden
  2. 真的没有权限 需要修改一下配置 chrod 修改权限

解决Nginx出现403 forbidden

相当良心的解决方案

2.2.3 配置反向代理

我用的豆瓣随便的一个接口来测试的

    # 重写
    rewrite  ^.+api/?(.*)$ /$1 break;
    # 配置代理
    proxy_pass   https://api.douban.com;
}

2.3 测试跨域

<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="jquery.js"></script>
    <title>Title</title>
</head>
<body>
<div>
    <button id="btn1">测试跨域</button>
    <div id="content"></div>
</div>
<script type="text/javascript"> $(document).ready(function () {
        $("#btn1").click(function () {
            // 所有豆瓣请求都以 /api 开始  注意相对绝对路径
            $.get("/api/v2/book/1220562", function (data, status) {
                alert("数据: " + JSON.stringify(data) + "\n状态: " + status);
                $("#content").html(JSON.stringify(data))
            });
        });
    }); </script>
</body>
</html>

2.4 浏览器测试跨域,跨域成功

image.png image.png
image.png
image.png
image.png
image.png

详情查看https://segmentfault.com/a/1190000015890658

相关文章

  • 跨域解决方案(史上最易懂)

    跨域总结 1.跨域思路 跨域解决方案一般分为两种:前端解决,后端解决 1.1 前端解决方案 通过前端解决的思想就是...

  • ZUUL跨域问题

    云环境中每个服务自己有跨域解决方案,而网关需要做最外层的跨域解决方案.如果服务已有跨域配置网关也有,会出现*多次配...

  • JWT简记

    JSON Web Token(JWT)是目前最流行的跨域认证解决方案。 跨域认证问题及传统解决方案 传统认证流程 ...

  • Web前后端跨域问题处理

    跨域问题有前台跨域(iframe间)和后台跨域。 前台跨域的解决方案可以采用跨域文档通讯(Cross domain...

  • 跨域问题,解决方案

    跨域问题,解决方案 - Nginx反向代理跨域问题,解决方案 - CORS方案此为原作者的链接:跨域问题,解决之道

  • jwt介绍,以及在node和koa中的应用

    JWT JSON Web Token( JWT)是目前最流行的跨域认证解决方案。 一般的跨域认证方式 流程如下: ...

  • 前端如何解决常见跨域问题

    跨域解决方案 1、 通过jsonp跨域 2、 document.domain + iframe跨域 3、 loca...

  • 开发环境跨域和生产环境跨域

    开发环境跨域 前后端分离,IP地址不同,请求数据必然导致跨域问题;解决方案:proxy设置 生产环境跨域 解决方案...

  • 浏览器跨域及其解决方案

    title: 浏览器跨域及其解决方案author: Maydate: 20220428 什么是跨域跨域的表现解决跨...

  • JWT(Json Web Token)科普

    JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。 一、跨域认证...

网友评论

    本文标题:跨域解决方案(史上最易懂)

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