跨域原理及解决
admin
2024-03-06 00:52:33
0

跨域

跨域的出现:

  1. 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能.
  2. 注意同源策略,是因为浏览器,所以跨域的出现根本原因是浏览器,因此postman测试请求可以的接口,出现跨域很正常.
  3. 解决方法:在服务端解决.

proxy代理(本地开发环境)

  1. wabpack设置proxy代理:本质nodejs开的服务. 语法是node语法.
  2. 只支持本地环境,如上线后是同源最好,如上线后不同源,需配置Nginx代理.
    devServer: { //nodejs服务端代理proxy: {host: "0.0.0.0",port: 8088,https: false,hotOnly: false,proxy: { //nodejs服务端代理'/jacloud-web': {target: "http://110.53.177.22:8200/jacloud-web", //目标地址 即nodejs遇到前缀开头的会在前加上该地址。ws: true, //webSocket长连接changeOrigin: true, //是否跨域pathRewrite: { //路径重写 作用去掉/jacloud-web 如果前缀重复的情况.
// 原请求地址为/jacloud-web/todos 不替换时,http://110.53.177.22:8200/jacloud-web/jacloud-web/todos.               // 原请求地址为 /jacloud-web/todos 将'/jacloud-web'替换''时,// 代理后的请求地址为:http://110.53.177.22:8200/jacloud-web/todos"^/jacloud-web": "" //将会作用在url地址中。}}}},

Nginx代理

  1. 服务端设置Nginx反向代理.
  2. **注意:**传参id_token在使用ningx转发代理时候会导致请求内容丢失情况。
    原因:nginx不会识别"_"这个符号,默认情况下它会忽略,所以后端没接收到,也就是说请求时候将这个id_token转发为idtoken导致的。

cors(简单请求、非简单请求,优化option请求)

@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);HttpServletResponse response = (HttpServletResponse) res;response.setHeader("Access-Control-Allow-Origin", ((HttpServletRequest) req).getHeader("Origin"));//解决跨域关键代码response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE,PUT");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "Content-Disposition,Origin, X-Requested-With, Content-Type, Accept,Authorization,id_token");response.setHeader("Access-Control-Allow-Credentials","true");response.setHeader("Content-Security-Policy", "default-src 'self' 'unsafe-inline'; script-src 'self'; frame-ancestors 'self'; object-src 'none'");response.setHeader("X-Content-Type-Options", "nosniff");response.setHeader("X-XSS-Protection", "1; mode=block");chain.doFilter(req, res);}
  • 虽然有cors解决跨域,但是呢,cors会有一个情况,它会将请求分为简单请求和非简单请求。

简单请求:

满足以下几点是简单请求:
1、只限于get、post、head方法
2、请求头不超出以下字段(且没有其他自定义字段):
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
如果不满足以上其中之一,那就是非简单请求!

非简单请求会发送一个预检请求options,用来嗅探服务端是否允许非简单请求跨域访问资源。

  • 注意:这个options请求是浏览器自己发出的!

当然这是后端需要避免这方面的设置,避免踩坑.

相关内容

热门资讯

西安四天旅游攻略和费用是多少,... 嘿,宝子们!如果你打算来一场历史文化与美食交织的旅行,那西安绝对是你的不二之选。这座城市就像一部活的...
原创 暴... 2025年上半年,泰国旅游业面临严峻挑战,特别是中国游客数量大幅减少,对行业造成沉重打击。据统计,今...
如果这个世界上有八号当铺,你愿... 如果这个世界上有八号当铺,你愿意进去典当吗?我愿意进去典当,因为我觉得用自己不是那么在意的东西去换取...
能不能推荐几本校园青春小说,不... 能不能推荐几本校园青春小说,不要连载的,要有大结局的,求你啦!拽丫头与校草同居左耳,离歌,沙漏,会有...
电影《穿靴子的猫》十四分钟半左... 电影《穿靴子的猫》十四分钟半左右那段音乐,好像是小号吹的吧是americano
“贞子”是什么? “贞子”是什么?山上长得一种植物.果实外边有一层硬皮砸开之后瓤可以吃1998年,由松岛菜菜子、真田广...
海贼王火影死神哪部好看 海贼王火影死神哪部好看这三部动画都很出名,我想问下大家他们各自的含义,还有听听看大家的意见火影胜在剧...
求穿越搞笑的小说 求穿越搞笑的小说俏皮小妞之天下无双极品家丁......
胃镜检查需要全麻吗,大约需要多... 胃镜检查需要全麻吗,大约需要多长时间胃镜根本不用麻醉。。。
《我为歌狂》续集的顺序是什么? 《我为歌狂》续集的顺序是什么?《我为歌狂》有两部互相无关的续集,一部是《我为歌狂终结本8848》,另...
彼岸花开,花开彼岸。花开不见叶... 彼岸花开,花开彼岸。花开不见叶,叶生不见花,相念相惜不相见。传说种的花和叶永不相见,就这样吗?彼岸花...
参天小银瓶好不好? 参天小银瓶好不好?建议买小样试试,每个人肤质都不同。
大耳朵图图简介? 大耳朵图图简介?该剧讲述了小朋友图图和他的父母一家三日的生活琐事,其中图图是个小捣蛋儿,脑瓜里充满了...
狱血魔神觉醒流程 狱血魔神觉醒流程觉醒任务:  达到48级后,找G.S.D接取觉醒任务任务名称 完成条件 觉醒-狂暴...
红莲是怎么死的? 红莲是怎么死的?谁能给我讲一下从红莲和三尾斗,昏迷后被幽鬼丸叫醒一直到红莲死有关红莲的事?先谢谢了,...
中级口译? 中级口译?想考中级口译,不太了解这个考试,有2个问题1,中口先考笔译然后才能口译,中间可以间隔多长时...
实体书是什么意思 实体书是什么意思实体书是什么意思顾名思义,就是指已经出版发行了,并且印刷完成推向市场,读者能够在书店...
求男主角回到过去,又遇上了以前... 求男主角回到过去,又遇上了以前的自己,然后和以前的自己在一起的小说你是的这 是小说?自己爱上自己.那...
治疗肺癌的名老中医 治疗肺癌的名老中医你好,我最近老是觉得腹胀的厉害,经常咳嗽的上不来气,老是觉得嗓子跟有东西似的,开始...
肉唐僧为什么不在嫣牛博上写博客... 肉唐僧为什么不在嫣牛博上写博客了?他可能去西天取经路上到了没有wifi的地方,过两天有网了他就写了~...