美文网首页vue.js
两种常用的跨域设置

两种常用的跨域设置

作者: 胡儒清 | 来源:发表于2019-08-27 20:51 被阅读0次

nodejs服务器端跨域设置

使用一个中间件

app.use(async (ctx,next)=> {
    // * 表示允许所有域名访问,可以设置指定的域名
    ctx.set('Access-Control-Allow-Origin', '*');
    await next();
})

更为复杂一点的跨域中间件如下:

module.exports = app => {
  // 跨域设置
  app.use(async (ctx, next) => {
    // 跨域设置
    ctx.set("Access-Control-Allow-Origin", "*");
    // 请求头设置
    ctx.set(
      "Access-Control-Allow-Headers",
      `Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild,x-token,sessionToken,token`
    );
    ctx.set("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS");
    // 一天内不会发送options请求
    // ctx.set('Access-Control-Max-Age', '86400');
    // 预请求处理
    if (ctx.method == "OPTIONS") {
      ctx.body = 200;
    } else {
      await next();
    }
  });
};

webpack设置跨域

  1. 我们的服务器域名是 http://132.232.94.151:3005,而我们本地跑的服务端口域名为http://localhost:8082

这时候我们本地的项目去访问远程的接口就是跨域了,会出现如下提示

Access to XMLHttpRequest at 'http://132.232.94.151:3005/goods' from origin 'http://localhost:8082' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  1. 如果服务器没有设置跨域,我们可以在webpack去设置跨域,具体做法如下:

.env.development 配置

VUE_APP_URL="/api"   // 即使我们的接口地址没有api,也是这样写,后面有说明

axios的拦截器使用 process.env.VUE_APP_URL获取上面环境配置的地址

const service = axios.create({
  baseURL: process.env.VUE_APP_URL, // api 的 VUE_APP_URL
  timeout: 50000 // 请求超时时间(因为需要调试后台,所以设置得比较大)
});
  1. 项目根目录vue.config.js(若没有就创建)配置跨域

    module.exports = {
      devServer: {
        proxy: {
         // 只要请求地址有'api'都会匹配上 
          "/api": {
            target: "http://132.232.94.151:3005",
            ws: true,
            changeOrigin: true,
            pathRewrite: {
              "^/api": "" //通过pathRewrite重写地址,将前缀/api转为/
            }
          }
        }
      }
    }
    
  2. 我们的vue项目里有如下请求

     created() {
        let url = "/goods";
        this.$axios
          .get(url)
          .then(result => {
            console.log("result", result);
          })
          .catch(err => {
            console.log("err", err);
          });
      }
    
  3. 查看我们的控制台的network发现,我们发送了这样的一个请求

    http://localhost:8082/api/goods
    
  4. 很神奇的是我们竟然拿到了数据,原因就是,上面我们配置的proxy(代理的意思),当我们发送请求```http://localhost:8082/api/goods``,这个代理插件发现我们的请求带有'api',它就我们把这个请求转发到http://132.232.94.151:3005, 同时下面的这个配置

    pathRewrite: {
     "^/api": "" //通过pathRewrite重写地址,将前缀/api转为/
    }
    

    能帮我们把/api 变为/,所以我们请求 http://localhost:8082/api/goods, 最后实际上我们请求的是 http://132.232.94.151:3005/goods

相关文章

  • chrome关闭跨域

    跨域 在开发过程中,碰到跨域是在所难免的,但是后端可能又懒得设置cors,或者不知道怎么设置。常用跨域解决方案就不...

  • 两种常用的跨域设置

    nodejs服务器端跨域设置 使用一个中间件 更为复杂一点的跨域中间件如下: webpack设置跨域 我们的服务器...

  • 两种常用的跨域设置

    nodejs服务器端跨域设置 使用一个中间件 更为复杂一点的跨域中间件如下: webpack设置跨域 我们的服务器...

  • 跨域之三:降域 和 postMessage

    本节内容:实现跨域常用的两种方式 —— 降域 和 postMessage 零:跨域报错展示 在非同源情况下,操作 ...

  • AJAX 跨域请求常用两种处理方法

    AJAX 跨域请求常用两种处理方法 -- 第一、 使用 跨域资源共享(CORS) CORS(Cross-Origi...

  • C# Web直接上传视频或者文件到OSS

    代码 解决本地调试跨域问题 设置跨域规则:找到OSS存储——Bucket列表——基础设置——跨域访问——设置 暴露...

  • 跨域之二:JSONP 和 CORS

    本节内容:实现跨域常用的两种方式 —— JSONP 和 CORS 零:跨域报错展示 在非同源情况下,调用 Ajax...

  • Nodejs 设置跨域

    设置允许所有域名跨域: 设置允许指定域名“http://www.tefang.cn”跨域: 设置允许多个域名跨域:...

  • [头参数]06 - Cookie

    目录 测试Cookie的流程 过期时间 设置httpOnly 设置Secure 跨域问题 0. 概述 常用参数 m...

  • PHP设置允许ajax跨域请求的两种常见方法

    关于跨域请求 在这个api横行的时代, 以及用户体验为王的时代, 跨域请求是有发生, 经常用到的有两种情况: 一....

网友评论

    本文标题:两种常用的跨域设置

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