前后端分离如何处理跨域问题

    跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
    什么情况下不是跨域?

    即:满足域名、协议、端口均相同的即不是跨域。

例如

http://www.b.com/index.html 调用 http://www.b.com/server (非跨域)

http://www.bone.com/index.html 调用 http://www.btwo.com/server(主域名不同:one/two,跨域)

http://www.b.com:8080/index.html 调用 http://www.b.com:8081/server (端口不同:8080/8081,跨域)

http://www.b.com/index.html 调用 https://www.b.com/server (协议不同:http/https,跨域)

解决方案:

 

    1用nginx做web服务器,将请求转发,就没有跨域的问题了

            通过反向代理服务器监听同端口,同域名的访问,不同路径映射到不同的地址,比如,在nginx服务器中,监听同一个域  名和端口,不同路径转发到客户端和服务器,把不同端口和域名的限制通过反向代理,来解决跨域的问题,案例如下:

 

server {
        listen       80;
        server_name  domain.com;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location /client { #访问客户端路径
            proxy_pass http://localhost:81;
            proxy_redirect default;
        }
        location /apis { #访问服务器路径
            rewrite  ^/apis/(.*)$ /$1 break;
            proxy_pass   http://localhost:82;
       }
}

    2 CORS在后端设置响应头,把你需要运行访问的域名加入加入Access-Control-Allow-Origin中。

    Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。

x详细https://blog.youkuaiyun.com/liboyang71/article/details/77867239

    3jsonp把后端根据请求,构造json数据,并返回,前端用jsonp跨域。

 

            

            

        

 

 


 

### 解决前后端分离中的CORS问题 #### CORS简介 资源共享(CORS, Cross-Origin Resource Sharing)是一种机制,它使用额外的HTTP头来告诉浏览器允许一个上的网页访问另一个上的资源[^1]。 #### 同源策略的影响 由于同源策略的存在,出于安全考虑,默认情况下不允许来自不同源的请求获取或操作其他源的数据。然而,在实际的研发过程中,尤其是采用前后端分离架构的情况下,确实存在需要越这些限制的需求[^2]。 #### 实现方案概述 针对基于Spring Boot框架构建的服务端应用程序,可以通过多种方式处理CORS请求: - **局部配置**:仅对特定控制器或接口开放CORS支持; - **全局配置**:在整个应用层面统一设置CORS规则; #### 使用`@CrossOrigin`注解的方式 对于某些具体的API路径,可以直接在其对应的Controller类上添加`@CrossOrigin`注解来进行简单的配置。这种方式适合于只需要为少量几个API提供权限的情况[^3]。 ```java @RestController @RequestMapping("/api") @CrossOrigin(origins = "http://example.com", maxAge = 3600) public class MyRestController { // API methods... } ``` #### 继承`WebMvcConfigurer`并覆盖`addCorsMappings()`方法 如果希望整个项目都能自动响应带有合法来源的预检请求,则可以在启动类中创建一个新的配置文件,并通过实现`WebMvcConfigurer`接口以及覆写其中的`addCorsMappings()`函数完成更复杂的自定义逻辑[^4]。 ```java @Configuration public class GlobalCorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**")// 对所有的路径都生效 .allowedOrigins("*") // 允许所有访问 .allowedMethods("*") // 支持全部类型的Http Method (GET/POST...) .allowCredentials(true)// 是否发送Cookie .maxAge(3600); // 预检请求的有效期为一小时 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值