前端解决 API 跨域的几种方式

使用 webpack 配置代理

webpack 对于前端来说是个强大的工具, 除了能够帮助你打包和启动调试服务器外, 代理的功能也值得你了解下
中文文档地址 webpack 印记中国

最简单的配置

module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': 'http://localhost:3000'     // 需要反向代理的后端接口地址
    }
  }
};

上述配置将自动把 /api 这一地址的访问转请求到 http://localhost:3000 从而起到了代理的作用。

如果你的规则需要去掉 api 前缀,你可以使用重写地址的方式。

module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        pathRewrite: {'^/api' : ''}
      }
    }
  }
};

你可能还遇到 https 的安全问题触发未验证的证书错误, 则你可以简单的加上 secure: false 来处理

module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': {
        target: 'https://other-server.example.com',
        secure: false
      }
    }
  }
};

有时你不想代理所有的请求。可以基于一个函数的返回值绕过代理。 在函数中你可以访问请求体、响应体和代理选项。必须返回 false 或路径,来跳过代理请求。 例如:对于浏览器请求,你想要提供一个 HTML 页面,但是对于 API 请求则保持代理。你可以这样做:

proxy: {
  "/api": {
    target: "http://localhost:3000",
    bypass: function(req, res, proxyOptions) {
      if (req.headers.accept.indexOf("html") !== -1) {
        console.log("Skipping proxy for browser request.");
        return "/index.html";
      }
    }
  }
}

多个路径的代理

proxy: [{
  context: ["/auth", "/api"],
  target: "http://localhost:3000",
}]

webpack 提供了多种灵活的方式, 相信大多时候都能满足到你到要求。

此方式最合适项目已经使 webpack 工程项目,随项目启动自动开启

使用 http-server 模块进行代理

熟悉 nodejs 的朋友应该知道有个非常好和强大的工具模块叫 http-server ,使用方式如下:

安装全局模块

 npm install http-server -g

然后到你需要运行展示的 html 资源目录执行

// http://www.your-backend.com/api 是需要反向代理的后端接口地址
http-server -P http://www.your-backend.com/api

然后你就可以使用 http://localhost:8080 进行访问了(如果 8080 端口不被占用掉的话,若占用了你可以 -p 指定其他端口 ),是不是超级 easy?

更多参数可以查询官方文档 http-server

使用 nodejs 的 node-http-proxy 模块来处理

node-http-proxy 提供了一个可以编程模式的代理环境,如果你有很特殊的需求如session、cookie 已绑定的域处理成其他的域什么,或是内容还要转换处理等,你可以用这个方式来处理复杂的 hacker.

如增加特殊请求头;

var http = require('http'),
    httpProxy = require('http-proxy');
 
var proxy = httpProxy.createProxyServer({});

 
proxy.on('proxyReq', function(proxyReq, req, res, options) {
  proxyReq.setHeader('X-Special-Proxy-Header', 'foobar');
});

var server = http.createServer(function(req, res) {
  // You can define here your custom logic to handle the request
  // and then proxy the request.
  proxy.web(req, res, {
    target: 'http://127.0.0.1:5060'
  });
});

console.log("listening on port 5050")
server.listen(5050);

上面三种方法参考:https://yq.aliyun.com/articles/610231

使用 nginx 配置

官网下载稳定版

在这里插入图片描述

下载完成后,解压到 E 盘

在这里插入图片描述

打开 conf 目录下的 nginx.conf 文件进行反向代理配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  on;
	
	server {
        listen       8000;
        server_name  localhost;
		
		location / {
			proxy_pass http://127.0.0.1:8080;    # 前端项目服务地址
        }
		
		location /api {
			proxy_pass http://127.0.0.1:3030;  # 后台接口服务地址
        }

		location  /v2 {
			proxy_pass https://api.douban.com/v2; # 其他服务地址,如豆瓣
		}
    }

}

ctrl+r 运行 cmd 进入到解压目录运行 start nginx 命令开启服务

在这里插入图片描述

在浏览器 http://localhost:8000/ 查看,代理成功

在这里插入图片描述
nginx 常用命令:

  • start nginx 开启服务
  • nginx -s reload 重新加载配置文件
  • nginx -s stop 停止服务
  • nginx -s quit 退出服务

不错的 nginx 文章: 做个前端,来点Nginx

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UniApp 是一款支持多个平台的跨端开发框架,它可以将一份代码同时转化成可以运行在多个平台上的应用程序,包括 iOS、Android、H5 等平台。 在前端开发中,H5 平台是最为常见的一种平台,因为它可以直接在浏览器上运行,无需安装应用程序。如果你要解决 UniApp 前端开发中的 H5 跨域问题,你可以通过以下几种方式来进行配置: 1. 通过设置 App.vue 文件中的 meta 标签,指定 H5 应用程序的访问权限,如下所示: ```html <meta http-equiv="Content-Security-Policy" content="default-src *;img-src * data:"> ``` 这段代码中的 Content-Security-Policy 指定了 H5 应用程序的默认源和图像源,其中 * 表示允许所有源进行访问,data: 表示允许使用 data 协议访问图像资源。 2. 通过在 uni-config.json 配置文件中添加 devServer 字段,指定跨域的代理配置,如下所示: ```json { "devServer": { "proxy": { "/api": { "target": "http://localhost:3000", "changeOrigin": true, "pathRewrite": { "^/api": "" } } } } } ``` 这段代码中的 proxy 配置可以将所有以 /api 开头的请求代理到指定的目标地址,同时修改请求头中的 origin 字段,避免跨域问题。 3. 通过在 uni-app 的 manifest.json 文件中添加配置,指定 H5 应用程序的访问域名,如下所示: ```json { "h5": { "devServer": { "port": 8080, "host": "localhost", "publicPath": "/", "disableHostCheck": true }, "router": { "mode": "hash", "base": "/" }, "appPlus": { "useweweb": false, "enableWKWebview": false }, "app": { "name": "uni-app", "theme": "#000000", "backgroundColor": "#f7f7f7", "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#ffffff", "navigationBarTitleText": "uni-app", "navigationBarTextStyle": "black", "navigationStyle": "default", "enablePullDownRefresh": false, "onReachBottomDistance": 50 }, "mp": {}, "tt": {} } } ``` 在上述代码中,我们可以通过设置 devServer.host 字段来指定 H5 应用程序的访问域名,从而避免跨域问题。 以上是我为你提供的三种解决 UniApp 前端开发中 H5 跨域问题的方法,希望可以对你有所帮助。如果你还有其他问题,欢迎继续

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值