开发必遇的问题 --- 跨域问题

本文深入解析了跨域问题的本质,即浏览器同源策略导致的请求限制,并提供了多种解决方案,包括前端Webpack配置、中间件Nginx反向代理及后端CORS策略,适合前后端分离项目的开发人员参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、什么是跨域问题

当前页面的 协议、域名、端口, 这三者之一与请求 url的不同,即为跨域

在这里插入图片描述

协议不同

http://www.baidu.com
https://www.baidu.com

域名不同

https://www.baidu.com
https://taobao.com

端口不同

http://localhost:5500/index.html
http://localhost:6700/index.html

2、为什么会出现跨域问题

出于浏览器的同源策略限制,所谓同源就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

以前开发很少出现跨域问题,因为基本都是后端 连同前端的一起开发的,

现在是前后端分离的开发模式,可能前端放在这个地址,后端接口放在那个地址,就会出现跨域问题

3、如何解决跨域问题

举个例子,现在前端使用 webpack的项目,进行网络请求

/* 网络请求的js代码 */
let xhr = new XMLHttpRequest();
xhr.open('get', 'http://www.xxxxxxxx.xxx/xxx', true);
xhr.onload = function() {
  console.log(xhr.response)
}
xhr.send()
/* webpack.config.js 的配置文件 */
const path = require('path')

module.exports = {
  // entry: 入口    output:出口
  entry: './src/main.js',
  output: {
    // path: 绝对路劲 , 需要动态获取路劲
    // path.resolve(__dirname, 'dist') --> 将获取当前项目的位置, 与dist进行拼接
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/'
  }
}

果不其然,遇到了跨域问题

在这里插入图片描述

3.1、前端:Webpack proxy

使用webpack的 proxy的方式来解决跨域问题,就是使用一种代理的方式,将网络请求代理为你要请求的接口

/* 将请求方式改变为 本地的 http://localhost:5501/api/users */
let xhr = new XMLHttpRequest();
xhr.open('get', '/api/users', true);  // 改变
xhr.onload = function() {
  console.log(xhr.response)
}
xhr.send()
/* webpack.config.js 的配置文件 添加 proxy的代理模式 */
const path = require('path')

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/'
  },
  devServer: {
    proxy: {  // 代理
      '/api': { // 将 /api 开头的代理为 target 的路径
        target: 'http://www.xxxxxxxx.xxxx',
        pathRewrite: {'/api': ''}  // 去除/api这个字符串
      }
    }
  }

}

3.2、前端:Webpack plugin

3.3、中间件:nginx反向代理

3.4、后端:cors(推荐)

后端的我讲不清楚,可以看看这篇博客:https://blog.youkuaiyun.com/qq_38128179/article/details/84956552

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值