首先我们要了解跨域产生的原因:

域名、协议、端口有一个不同就会产生跨域,是浏览器的同源策略引起的
(所谓同源是指:域名、协议、端口相同。)

使用一个中间层来发请求。只需要前端来处理即可。

解决跨域的方式

解决跨域的方式有很多:JSONP、CORS、服务器代理、document.domain、window.name、location.hash、postMessage

主要说一下市面上常见的方式:代理

代理解决跨域:

这里是引用

  1. 自己写一套nodejs的中间层

    1. 通过这个中间层去请求,比如说猫眼 (这里不会跨域)
    2. 前端代码再去请求这个中间层 (这里会跨域,但是可以解决)


原理:客户端向中间层发送请求,中间层又向后端发送请求,后端将数据返回给中间层,中间层再把数据返回给前端。

中间层如何操作

以请求猫眼电影如下地址为例:

http://m.maoyan.com/ajax/movieOnInfoList?token=&optimus_uuid=3AB8F27070A711EAB5F6EFED118239404C0B76B745824C469A76587DC457FAA1&optimus_risk_level=71&optimus_code=10

  1. 使用 nodejs 启动一个代理服务
  2. 下载引入http-proxy-middleware这样一个中间件
// 1. 引入 express
const express = require("express");// 2. 引入 http-proxy-middleware 。并结构出它里面的 createProxyMiddleware 这个函数
const { createProxyMiddleware } = require("http-proxy-middleware");// 3. 生成 express 实例
const app = express();app.use((req, res, next) => {res.set({"Access-Control-Allow-Origin": "*"});next();
});// 4. 调用代理中间件,确定一个前缀app.use("/api",createProxyMiddleware({// 配置选项// 目标地址, 只需要协议和主机。路径什么的不要target: "http://m.maoyan.com",// 路径重写pathRewrite: {"^/api": ""},changeOrigin: true})
);// end 监听端口
app.listen(3000, () => {console.log("代理服务启动成功");
});
//详解:
// 前端服务:http://localhost:8080
// 代理服务:http://localhost:3000
// 目标服务:http://m.maoyan.com// 前端服务 -> 代理服务 -> 目标服务
http://localhost:8080 -> http://localhost:3000/api/ajax/movieOnInfoList?token=&optimus_uuid=3AB8F27070A711EAB5F6EFED118239404C0B76B745824C469A76587DC457FAA1&optimus_risk_level=71&optimus_code=10 -> http://m.maoyan.com/api/ajax/movieOnInfoList?token=&optimus_uuid=3AB8F27070A711EAB5F6EFED118239404C0B76B745824C469A76587DC457FAA1&optimus_risk_level=71&optimus_code=10// 上述流程中,目标服务是不需要 /api 这个前缀的
// 这时还需要配置一个代理的路径重写规则   pathRewrite// 前端服务 -> 代理服务 -> 目标服务
// http://localhost:8080 -> http://localhost:3000/api/ajax/movieOnInfoList?token=&optimus_uuid=3AB8F27070A711EAB5F6EFED118239404C0B76B745824C469A76587DC457FAA1&optimus_risk_level=71&optimus_code=10 -> http://m.maoyan.com/ajax/movieOnInfoList?token=&optimus_uuid=3AB8F27070A711EAB5F6EFED118239404C0B76B745824C469A76587DC457FAA1&optimus_risk_level=71&optimus_code=10

最后,前端再去请求“http://localhost:3000/api/ajax/movieOnInfoList?token=&optimus_uuid=3AB8F27070A711EAB5F6EFED118239404C0B76B745824C469A76587DC457FAA1&optimus_risk_level=71&optimus_code=10”这个地址即可。

如何用代理解决api接口跨域问题相关推荐

  1. 关于vue2用vue-cli搭建环境后域名代理的http-proxy-middleware解决api接口跨域问题

    在vue中用http-proxy-middleware来进行接口代理,比如:本地运行环境为http://localhost:8080但真实访问的api为 http://www.baidu.com这时我 ...

  2. 通过设置Ionic-Cli代理解决ionic serve跨域调试问题

    通过设置Ionic-Cli代理解决ionic serve跨域调试问题 参考文章: (1)通过设置Ionic-Cli代理解决ionic serve跨域调试问题 (2)https://www.cnblog ...

  3. 解决常见接口跨域问题

    解决常见接口跨域问题 参考文章: (1)解决常见接口跨域问题 (2)https://www.cnblogs.com/RENQIWEI1995/p/7797269.html 备忘一下.

  4. php跨域请求解决方案_解决TP接口跨域问题

    首先在入口文件添加 也就是public下的index.php目录下添加 // [ 应用入口文件 ] // 处理跨域需遇见请求 if(isset($_SERVER['REQUEST_METHOD'])& ...

  5. Vue代理解决生产环境跨域问题

    当我们前端要调用跨域接口时,我们需要用代理解决跨域问题,比如Vue的代理配置proxy,但是当Vue项目打包成静态文件时,他的代理也就失灵了,因为代理的前提是本地必须有service,本章讲一下生产环 ...

  6. Vue代理解决生产环境跨域问题 部署必备干货

    当我们前端要调用跨域接口时,我们需要用代理解决跨域问题,比如Vue的代理配置proxy,但是当Vue项目打包成静态文件时,他的代理也就失灵了,因为代理的前提是本地必须有service,本章讲一下生产环 ...

  7. niginx反向代理解决前后端跨域问题

    1.代理和跨域 1.1 正向代理 1)用户希望代理服务器帮助其和要访问服务器之间实现通信,需要: a.用户IP报文的目的IP=代理服务器IP: b.用户报文端口号=代理服务器监听端口号: c.HTTP ...

  8. 【古法炮制】最原始的解决JAVA接口跨域的问题

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  9. Vue Nginx反向代理配置 解决生产环境跨域

    Vue本地代理举例: module.exports = {publicPath: './',devServer: {proxy: {'/api': {target: 'https://movie.do ...

最新文章

  1. jQuery11 data() : 数据缓存
  2. 波士顿大学数学与计算机科学,2021战报 | 美国波士顿大学金融数学硕士录取
  3. gulp之gulp.watch报错
  4. bootStrap库介绍
  5. sql 标量子查询_SQL Server 2017:标量子查询简化
  6. Microsoft Dynamics CRM MVP
  7. Linux下彻底卸载mysql
  8. [e袋购APP]高校物业管理的特点
  9. pl/sql编程语言
  10. 谈一谈|《黑神话:悟空》实机演示观后感
  11. 怦然心动(Flipped)-10
  12. webuploader怎样上传文件夹
  13. Micro LED将引领小间距显示的未来。
  14. 正则表达式-校验 Ip地址 Mac地址 端口 经纬度 车牌号码
  15. 服务器上显示叹号是什么意思,服务器上显示黄色叹号
  16. 如何将英文文献转中文?
  17. yolov5---detect.py注释解析
  18. SVN管理工具Cornerstone之:创建分支、提交合并
  19. 1年时间从12K到30K,一位外卖小哥的真实逆袭历程!
  20. 华硕编程竞赛11月JAVA专场 G题飞行棋 题解

热门文章

  1. 甘肃省甘南藏族自治州谷歌卫星地图下载
  2. thinkcentreE95微型计算机,标准化商务办公优选 ThinkCentre E95评测
  3. 4110.圣诞老人的礼物
  4. linux主机名(静态主机名、临时主机名)
  5. 那些人生最重要的转折点
  6. 气化及燃烧相关知识点
  7. 推荐系统——利用用户行为数据
  8. 【SSM-报销单】6.报销单-审核报销单,打款
  9. #SORA#etcd研究
  10. 如何在工作中保持专注力