前后端开发过程中的跨域问题总结

30 篇文章 0 订阅

1.何为跨域问题

出于浏览器的同源策略限制。同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能不能使用。可以说web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议、主机和端口号

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不一致,即跨域

当前页面url被请求页面url是否跨域原因
http://www.a.comhttp:www.a.con/index.html没有跨域同源(协议、域名、端口相同)
http://www.a.comhttps://www.a.com跨域协议不同
http://www.a.comhttp:www.b.com跨域主域名不同
http://www.a.comhttp://org.a.com跨域子域名不同
http://www.a.com:8080http://www.a.com:8081跨域端口号不同

 2.同源策略的限制:

1、无法读取非同源网页的Cookie、LocalStorage 和 IndexedDB

2、无法接触非同源网页的DOM

3、无法向非同源地址发送AJAX请求

3、解决跨域问题

1、jsonp 前端解决

可自行百度

2、springboot CorsFilter

@Configuration
public class CorsConfig {
 
	public CorsConfig() {
 
	}
 
	@Bean
	public CorsFilter corsFilter() {
		// 1. 添加cors配置信息
		CorsConfiguration config = new CorsConfiguration();
 
		// 设置允许所有请求
		config.addAllowedOrigin("*");
 
		// 设置允许请求的方式
		config.addAllowedMethod("*");
 
		// 设置允许的header
		config.addAllowedHeader("*");
 
		// 设置是否发送cookie信息
		config.setAllowCredentials(true);
 
		// 2. 为url添加映射路径
		UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
		corsSource.registerCorsConfiguration("/**", config);
		// 3. 返回重新定义好的corsSource
		return new CorsFilter(corsSource);
 
	}
 
}

3、nginx配置

server {
        listen       89;
        server_name  localhost;
 
        # 允许跨域请求的域,*代表所有
        add_header 'Access-Control-Allow-Origin' *;
        # 允许带上cookie请求
        add_header 'Access-Control-Allow-Credentials' 'true';
        # 允许请求的方法,比如 GET/POST/PUT/DELETE
        add_header 'Access-Control-Allow-Methods' *;
        # 允许请求的header
        add_header 'Access-Control-Allow-Headers' *;
 
        location / {
            root   html;
            index  test.html;
        }
 
 
 
    }

4、webpack本地代理

proxy: {
   '/api/v1': {
    target: "http://xx.x.x.xxx:8080",
    pathRewrite: {
     '^/api/v1': ''
    },
        secure: false,
        changeOrigin: true,
        logLevel: "debug"
     }
    }

这个在本地开发过程中经常遇到,由node.js完成跨域

5、websocket

websocket是HTML5的一个持久化的协议,它实现了浏览器和服务器的全双工通信,同时也是跨域的一种解决方案。websocket和http都是应用层协议,都基于TCP协议。但是websocket是一种双向通信协议,在建立连接之后,websocket的服务器与客户端都能主动向对方发送或接收数据。同时,websocket在建立连接时需要借助http协议,连接建立好了之后client与server之间的双向通信就与http无关了

注意:htpps协议网站不能嵌套http协议的页面

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值