跨域问题(@CrossOrigin和Proxy)

这篇具有很好参考价值的文章主要介绍了跨域问题(@CrossOrigin和Proxy)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1️⃣跨域问题

在Web开发中,如果前端页面和后端接口不在同一个域名下,就会发生跨域请求的问题。同源策略是浏览器的一种安全策略,它限制了来自不同源的客户端脚本在浏览器中运行时的交互。同源指的是协议、域名、端口都相同。如果客户端脚本试图通过XMLHttpRequest或Fetch API等方式访问不同源的数据,就会被浏览器拦截。

例如,如果前端页面部署在http://localhost:8080,而后端接口部署在http://localhost:8081,则这两个页面就不在同一个域名下,就会发生跨域请求的问题。

为了解决跨域请求的问题,可以使用一些方式,例如在服务器端配置CORS(Cross-Origin Resource Sharing)策略、使用JSONP、使用代理服务器等。在Spring框架中,可以使用@CrossOrigin注解来解决跨域请求的问题。

2️⃣@CrossOrigin注解解决跨域

@CrossOrigin是Spring框架中的一个注解,用于解决跨域请求的问题。在Web开发中,如果前端页面和后端接口不在同一个域名下,就会发生跨域请求的问题,这时候就需要使用@CrossOrigin来解决这个问题。

@CrossOrigin注解可以添加在Controller类或者Controller的方法上,用于指定允许跨域请求的域名和其他相关配置。以下是一个使用@CrossOrigin注解的示例:

@RestController
@RequestMapping("/api")
public class UserController {
 
    @GetMapping("/user")
    @CrossOrigin(origins = "*", maxAge = 3600)
    public List<User> getUsers() {
        // ...
    }
}

在上面的示例中,@CrossOrigin(origins = "*", maxAge = 3600)表示允许所有域名的请求,并且设置了缓存时间为3600秒。如果要指定某个域名,可以将*替换为具体的域名,如@CrossOrigin(origins = "http://localhost:8080", maxAge = 3600)

使用@CrossOrigin注解可以避免跨域请求的问题,但是也可能会带来一些安全问题,因此需要谨慎使用。如果只是需要在开发环境中进行测试,可以暂时使用@CrossOrigin来解决问题,但是在生产环境中最好还是使用其他更安全的方式来解决跨域请求的问题。

3️⃣Proxy解决跨域问题

在Web开发中,使用代理服务器(Proxy)可以解决跨域请求的问题。代理服务器是一个位于客户端和目标服务器之间的服务器,它可以拦截客户端发送的请求并转发到目标服务器上。因此,如果客户端需要请求跨域的数据,可以先将请求发送给代理服务器,然后由代理服务器转发到目标服务器上,从而避免了跨域请求的问题。

以下是一个使用代理服务器解决跨域请求的示例:

  1. 首先,需要在客户端代码中配置代理服务器的地址和端口号,可以使用http-proxy-middleware库来实现:
// src/setupProxy.js

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/api',
    createProxyMiddleware({
      target: 'http://localhost:8081',  // 目标服务器地址
      changeOrigin: true,  // 是否改变请求头中的Origin,默认为false
      pathRewrite: {  // 路径重写规则
        '^/api': ''
      }
    })
  );
};

在上面的代码中,createProxyMiddleware用于创建一个代理服务器中间件,target指定了目标服务器的地址,changeOrigin指定是否改变请求头中的Origin,pathRewrite指定了路径重写规则,将/api重写为''

  1. 在客户端代码中使用/api作为接口的前缀,发送请求即可:
// src/App.js

import React, { useState, useEffect } from 'react';
import axios from 'axios';

function App() {
  const [data, setData] = useState([]);

  useEffect(() => {
    axios.get('/api/users')
      .then(res => {
        setData(res.data);
      })
      .catch(err => {
        console.error(err);
      });
  }, []);

  return (
    <div>
      {data.map(item => (
        <div key={item.id}>{item.name}</div>
      ))}
    </div>
  );
}

export default App;

在上面的代码中,使用axios库发送请求,请求的地址为/api/users,因为在setupProxy.js中配置了代理服务器,所以实际上请求的地址为http://localhost:8081/users,从而避免了跨域请求的问题。

使用代理服务器可以解决跨域请求的问题,但是也可能会带来一些安全问题,因此需要谨慎使用。如果只是需要在开发环境中进行测试,可以暂时使用代理服务器来解决问题,但是在生产环境中最好还是使用其他更安全的方式来解决跨域请求的问题。文章来源地址https://www.toymoban.com/news/detail-665767.html

到了这里,关于跨域问题(@CrossOrigin和Proxy)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vite 配置代理 Proxy,Vue配置代理,解决前端跨域

    我们在做项目的时候经常会遇到跨域的问题,之所以会出现跨域问题是因为浏览器的同源策略,即协议、域名、端口需要一致,才可以访问服务端的资源。当一个请求地址(服务端的地址)的协议、域名、端口三者之间任意一个与当前页面地址(前端页面地址)不同即为跨域

    2024年02月17日
    浏览(55)
  • vue项目跨域问题(图片跨域)devServer.proxy代理失效时,nginx反向代理解决跨域问题

    ​ 本篇文章主要记录个人在公司项目开发中所遇问题,主要内容:在vue项目的开发中图片所存的服务器/端口号和项目所在的服务器/端口号不同,出现了跨域问题的保错。 ​ 如果文章有歧义,请各位大佬指出,避免误导更多的人!! Bug起因 ​ 在vue项目的开发中图片所存的

    2024年02月15日
    浏览(46)
  • 【前端工程化面试题】webpack proxy的工作原理,为什么能解决跨域问题

    在 webpack 的配置文件 webpack.config.js 中有一个配置项 devServer 里面有一个属性是 proxy,这里面可以配置代理服务器,解决跨域问题,请参考官网。 一般来说 webpack 的代理就是说的开发服务器 webpack-dev-server。 其实不光是 webpack 其他的打包工具比如是 vite,也有代理的功能,也是

    2024年02月21日
    浏览(59)
  • 已配置vue.config.js中的proxy代理,前端本地环境仍然请求后端出现跨域报错

    已配置vue.config.js中的proxy代理,前端本地环境仍然请求后端出现跨域报错 已配置vue.config.js中的proxy代理,前端本地环境仍然请求后端出现跨域报错 控制台仍然出现cors禁止报错,接口调不通 配置proxy代理解决跨域问题的原理是: 前端工程本地环境会启动一个 express 或 koa 的

    2024年02月01日
    浏览(58)
  • vue项目使用vite设置proxy代理,vite.config.js配置,解决本地跨域问题

    非同源请求,也就是协议(protocol)、端口(port)、主机(host)其中一项不相同的时候,这时候就会产生跨域 vite的proxy代理和vue-cli的proxy大致相同,需要在vite.config.js文件中配置(打包配置也在此) 代理配置在server中,可以上vite官网服务器选项查看server.proxy代码示例:开发服务器选

    2024年01月21日
    浏览(59)
  • vue2跨域问题解决[前端方法]

    前端项目中常见的跨域报错如下: Access to XMLHttpRequest at \\\'https://xxx.com/ms/\\\' from origin \\\'http://10.23.30.135:8080\\\' has been blocked by CORS policy: No \\\'Access-Control-Allow-Origin\\\' header is present on the requested resource. 针对这种跨域的报错我们可以通过后端设置 Access-Control-Allow-Origin 的header来解决,但一般

    2024年02月08日
    浏览(53)
  • 解决SpringBoot和前端Vue的跨域问题

    一、为什么会出现跨域问题           出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同

    2024年02月04日
    浏览(84)
  • 前端开发服务器中的 Proxy 代理跨域实现原理解读

    各位朋友你们好,我是 桃小瑞 ,微信公众 @ 桃小瑞 。在这给大家拜个晚年,祝各位朋友新年快乐。 在前端的开发过程中,尤其是在浏览器环境下,跨域是个绕不开的话题,相信每个前端都会涉及到这个问题,记住的就直接手敲解决跨域问题,记不住的就只能问度娘了。😂😂

    2024年01月16日
    浏览(60)
  • 前端常见跨域解决方案(jsonp,cors,proxy,postMessage,webSocket)

    一、JSONP(jsonp) 概念: JSONP(JSON with Padding,填充式 JSON 或参数式 JSON)是一种通过 优点: 简单易用 兼容性好,支持各种浏览器 缺点: 只能实现 GET 请求,无法实现 POST 等其他类型的请求 安全性较低,容易受到 XSS 攻击 Eg: 为什么需要动态生成标签,而不是直接通过 原因有

    2024年02月07日
    浏览(45)
  • Springboot+vue跨域+登录拦截问题,前端获取不到session,每次请求sessionid变化

    折磨了整整两天,终于把这个问题搞定了. 一开始后端开发完后,用apifox所有接口测试都是可以的,但当前端跑起来后发现接收不到后端的数据. 网上查了很多方法,首先试了查到的前端代理方法 没用,代理配置了但api不会替换成设置好的代理,还是以字符串形式到相对路径上. 于是找

    2024年01月19日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包