上线跨域问题(解决)!

前端(使用vercel)

区分生产环境和开发环境(2个方法)

方法1

const isDev = process.env.NODE_PATH === 'development'
const myAxios = axios.create({
     baseURL: isDev ? 'http://localhost:8080/api' : '线上接口'
 });

方法2(vite)

根目录新建两个文件

.env.production

.env.development

里面填写线上和开发地址

development填写
VITE_API_BASE_URL=https://开发地址(localhost)/



production填写
VITE_API_BASE_URL=https://线上地址.com/

在axios的全局配置中配置

const myAxios = axios.create({
    baseURL: import.meta.env.VITE_API_BASE_URL ||'http://localhost:8080/api'
});


myAxios.defaults.withCredentials = true//开启发送请求带着cookie

vercel代理配置

前端到此配置完成跨域的方案。

后端(微信云托管)

打包之前需要配置线上地址(在controller业务里面加入跨域注解)

@CrossOrigin(origins = "https://线上地址", allowCredentials = "true")

另外,全局的跨域config也需要配置一下

/**
 * 跨域配置
 *
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //设置允许跨域的路径
        registry.addMapping("/**")
                //设置允许跨域请求的域名
                //当**Credentials为true时,**Origin不能为星号,需为具体的ip地址【如果接口不带cookie,ip无需设成具体ip】
                .allowedOrigins("http://localhost:3000", "http://127.0.0.1:3000", "https://线上地址"
                        , "http://localhost:5173", "http://127.0.0.1:5173")
                //是否允许证书 不再默认开启
                .allowCredentials(true)
                //设置允许的方法
                .allowedMethods("*")
                //跨域允许时间
                .maxAge(3600);
    }
}

还需要配置yml文件,更换mysql、redis等地址,这里在application-prod.yml中

# 线上配置文件
spring:
  # DataSource Config
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: 'jdbc:mysql://xx.xx.xx.xx:3306/数据库table名?useSSL=false'
    username: root
    password: 1234
    #redis 配置
  redis:
    port: 6379
    host: xxx.xxx.xxx.xxx  # Redis 服务器的 IP 地址
    database: 0
    redisson_database: 3

server:
  address: 0.0.0.0
  servlet:
    session:
      cookie:
        secure: true  # 仅在 HTTPS 下发送 Cookie
        http-only: true  # 防止 JavaScript 访问
        same-site: none  # 允许跨域请求

配置完成,pc端和安卓可以正常访问,但是ios不能正常访问

ios需要在浏览器设置中打开防跨域追踪。

### uniapp 微信小程序 开发 问题 解决方案 #### 配置合法名 对于uniapp微信小程序中的问题配置合法名是一个重要的解决方案。这涉及到在微信公众平台上设置业务名、TSJ名(WebSocket)、支付回调名等。只有当这些名被正确配置后,才能确保不同源之间的资源请求能够顺利进行[^1]。 #### 使用开发者工具选项 为了方便调试,在开发阶段可以利用微信开发者工具提供的“不校验合法名”的开关来暂时绕过限制。不过需要注意的是,此方法仅适用于本地测试环境,并不适合上线后的正式版本使用。 #### 后端支持CORS 服务器端也需要做出相应调整以配合前端发起的请求。通过设置HTTP响应头`Access-Control-Allow-Origin`允许特定或全部来源访问API接口;还可以增加其他必要的CORS头部字段如`Access-Control-Allow-Methods`, `Access-Control-Allow-Headers`等,从而让浏览器认可来自不同源的数据交换行为。 #### 利用云开发能力 如果应用规模较小或者希望简化部署流程,则可以选择采用腾讯云提供的云开发(CloudBase)服务。它内置了对的支持,使得开发者无需额外处理复杂的网络通信逻辑就能轻松实现前后端分离架构下的数据交互需求。 ```javascript // 示例:如何在uni-app中调用微信云函数完成文件上传而不受同源策略影响 const cloud = require('wx-server-sdk'); cloud.init(); exports.main = async (event, context) => { try { const result = await cloud.uploadFile({ cloudPath: event.cloudPath, filePath: event.filePath // 文件路径 }); console.log(result); return result; } catch (err) { console.error(err); } }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值