范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

前后端分离后,JavaWeb开发如何解决跨域问题?

  做Web开发,经常会遇到跨域问题,小伙伴们在面试中,也经常被问到。这不,又有一位工作3年的小伙伴被问到这样一道题,说前后端分离后,如果解决跨域问题。
  今天,我给大家分享一下我的理解。
  这个问题也有很多小伙伴单独问过我,很多小伙伴知道如何解决跨域问题,但是却说不清楚跨域到底是怎么产生的。所以,回答跨域解决方案之前,我们先来介绍一下跨域产生的原因。1、产生原因
  因为一般的浏览器都有一个安全机制,叫做同源策略限制。所谓同源策略就是指用户输入的URL中包含的协议、域名、端口都完全相同。也就是说,我们使用浏览器访问网页时,必须符合同源策略的请求才能访问。如果有一项不同,浏览器会觉得有安全风险,就不想让你使用这个接口的数据。
  比如,在http://localhost:8080/index 页面中,用Ajax访问https://localhost:8081/index.json接口数据的时候,这两个URL的协议和端口不相同,也就是不同源,这就产生了跨域访问。当然,浏览器还是会将这个请求发送到后台服务器,但是,浏览器不会接收服务器响应结果。
  举个更通俗的例子,就好比你去肯德基点餐,非要点一碗兰州拉面,店员虽然很鄙视你,但他还是会打电话问一下兰州拉面馆问一下,兰州拉面馆说不给肯德基供货。所以,你没有吃到兰州拉面。这其中,有个反常的操作,就是虽然你点的兰州拉面,但是肯德基店员还是帮你打电话问了,是拉面馆不给肯德基供货的,如果拉面馆说给肯德基供货而且把面送过来了,那么你就能吃到兰州拉面了。
  这个案例中,店员就相当于是浏览器,肯德基呢就相当于当前看到的网页,兰州拉面馆就是相当于后台服务的接口。肯德基和兰州拉面不是同一个老板,相当于是不同源。拉州拉面就是你想要的接口数据。
  但如果使用Postman等开发工具进行交互是不会出现跨域问题的,这是浏览器特有的限制。
  其实,跨域问题也并不是前后端分离后才有的,后端开发的程序员一般都遇到过跨域问题。只是前后端分离开发以后,前端开发体现跨域问题更加明显了,经常要找后端开发人员来解决。2、预检请求
  为了支持跨域访问,浏览器设置了预检机制。也就是说在发出跨域请求时, 浏览器会自动发出一个查询请求,称为预检请求, 用来确认目标资源是否支持跨域。
  如果请求要满足以下条件,浏览器才不会发送预检请求:
  1、请求方法是GET 、PosT .HEAD其中任意一个
  2、请求头中包含Accept、Accept-Language、Content-Language、Content-Type、DPR、Downlink、Save-Data、Viewport.Width、Width字段。
  3、Content-Type的值是text/plain 、multipart/form-data ,application/x-ww-form-urlencoded 中任意一个。
  但是,在实际项目开发中,我们请求的Content-Type一般是是text/html、application/json等格式,或者使用自定义请求头,都会触发预检请求。
  浏览器获取到预检请求的响应结果之后,判断服务器如果授权允许访问这个资源,就会再次请求真正的URL,如果不允许就会报这样一个错。
  has been blocked by CORS policy : No "Access-contro1-A11ow-Origin" header is present on the requested resource.3、如何解决
  我们可以利用浏览器的预检机制。
  我只需要在后端服务添加CORS策略的配置就可以解决跨域问题。CORS全称是Cross Origin Resource Sharing,翻译过来叫做跨域资源共享。具体解决方案,有以下4种:
  1)、如果是普通的Web项目,只需要在服务的根目录下添加一个crossdomain.xml文件即可。文件格式如下:<?xml version="1.0"?>                        
  当然,使用这种方式不够灵活,在授权过度的情况下,会存在一些安全隐患。
  2)、如果是Spring项目的话,可以添加一个处理跨域的过滤器或者拦截器。如代码所示:public class CorsFilter implements Filter {      @Override     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {         HttpServletResponse response = (HttpServletResponse) res;         response.setHeader("Access-Control-Allow-Origin", "*");         response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");         response.setHeader("Access-Control-Max-Age", "3600");         response.setHeader("Access-Control-Allow-Headers", "x-requested-with");         chain.doFilter(req, res);     } }
  3)、如果是Spring Boot项目的话,只需要在方法上添加@CrossOrigin注解即可,如代码所示:@GetMapping("/list") @CrossOrigin public List list(){ 	... }
  如果需要支持跨域的方法非常多情况下,可以添加过滤器,比Spring更简洁,如代码所示:
  @Configuration public class CorsConfig { 	@Bean 	public CorsFilter corsFilter(){     CorsConfiguration corsConfiguration = new CorsConfiguration();     corsConfiguration.addAllowedOrigin("*"); 		corsConfiguration.addAllowedHeader("*");     corsConfiguration.addAllowedMethod("*"); 		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();     source.registerCorsConfiguration("/**",corsConfiguration); 		return new CorsFilter(source);   } }
  4)、Spring Boot项目还有一种更方便的方式,可以实现WebMvcConfigurer接口来实现跨域支持,如代码所示:
  @Configuration public class CorsConfiguration implements WebMvcConfigurer { 	@Override 	public void addCorsMappings(CorsRegistry registry) { 		registry.addMapping("/**") 		.allowed0riginPatterns( "*") 		.allowedMethods("GET","POST","PUT","DELETE","HEAD","OPTIONS")     .allowCredentials(true)I 		.maxAge(3600) 		.allowedHeaders("*");l 	} }
  只需要重写addCorsMapping() 方法就可以了。
  以上就是对Java Web跨域问题的解决方案。
  我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请动动手指分享给更多的人。关注我,面试不再难!
  最后,7/8/9月份资料文档已整理,包含如下↓(还在持续更新中!):
  ①100道最新大厂经典面试题解析资料文档!
  ②15万+字Java面试题解析 和配套答案!
  ③从应届生到高级开发都适用的简历模板!
  ④从入门到精通的架构师学习路线图!
  ⑤还有各种技术流程图,路径图!
  有需要的 Si 我 "666"拿!

让你鼻子一酸的句子,分享给大家01我的棱角,我的倔强,我的义无反顾。我这般爱笑愛闹的性格,终于也被打磨成了,这般寡言寡语的模样。02我好像不能这样,但也有只能这样,允许我做我自己,允许你做你。03失眠不是熬夜,抗衰从轮廓固定开始,忆龄告诉你什么是轮廓有人说,30岁以后人分两种,一种是成熟,一种是老。随着年纪增长,有些人慢慢变得沉稳干练睿智,而有些人则渐渐呈现出颓败垮塌的状态。从面貌上也能反映出这两种类型。有些女人到了40岁50殷墟墓葬内竟然发现了白种人的头骨,他们为什么会出现在这里?头条创作挑战赛甲骨文的发现撬动了殷墟上覆盖了3000多年的泥土,人们吃惊地方发现,殷墟商王墓葬的祭祀坑内,竟然有数量众多的白种人的头骨。那么这些异族人究竟是什么来历,他们的遗骨为何这款粉色樱桃,和你的胃口吗?樱桃KC200MX办公机械键盘测评体验大家好,我是饕餮我想一提到CHERRY樱桃,很多小伙伴都会想到机械轴体或者是机械键盘。确实,作为机械轴体的鼻祖,樱桃有太多经典的产品能够勾起人们的回忆。那身为知名键盘侠的我,各种樱空间站梦天实验舱完成发射前全区合练图为10月25日,梦天实验舱与长征五号B遥四运载火箭组合体转运至发射塔架。屠海超摄(新华社发)本报北京10月29日电(余建斌黄国畅屠海超)中国空间站梦天实验舱任务29日组织发射前系六国化工2022年前三季度净利润1。98亿元同比下降17。58中证智能财讯六国化工(600470)10月29日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入61。19亿元,同比增长44。59归母净利润1。98亿元,同比下降视界丨非凡工程共建湾区视频加载中金秋十月,朝阳似火。在粤港澳大湾区这片热土上,高楼崛起轨道铺就管线串联,建设现场正迸发出新时代更激昂的建设热情。中建二局腾讯广州总部大楼项目。中建八局广交会展馆四期项目。南河镇清风劲吹南河构筑清廉堡垒树廉洁之心,行廉洁之事,做廉洁之人。高山流水皆有情,清风明月廉无价。在南河镇观音沟村清廉乡村文化广场的一片小竹林里,一条条醒目的清廉宣传标语随处可见。我们村从今年以来开始打造清廉村之江生物2022年前三季度净利润6。28亿元同比增长4。25中证智能财讯之江生物(688317)10月28日披露2022年第三季度报告。2022年前三季度,公司实现营业总收入18。83亿元,同比增长27。18归母净利润6。28亿元,同比增长同江丨街津山秋韵十月里的街津山,是多彩多姿的。登高望远,江水蜿蜒,五花山色,令人向往。山顶,不时有片片白云在悠然地飘过,山下,丰收的田野一望无际,稻谷飘香,机声欢唱枫叶红了,映红了游人兴奋的面庞。早餐与早餐早晨起来,洗漱完毕,步入校园,坐进办公室,先读一段文字,作为精神的早餐,亦作为进入一天工作的添加剂。在我迂腐的思想里,我不能光吃物质的早餐,精神早餐和物质早餐同行并列,方感神清气爽
生态环境部部长黄润秋蓝天白云在北京不再是奢侈品这是一张以故宫午门为背景的夜晚天空星轨图,可以看到,夜空中繁星闪烁,在天空中划出一道道明亮的迹线。要拍出这样的照片,一定要空气质量非常好透明度非常高。今天(15日)上午,生态环境部前所未有的生态环境治理力度创造北京奇迹城市减量发展和大规模的生态环境建设为世界展现了一座高品质绿色宜居城市。连日来,北京的秋天从天坛的蓝天白云开始和北京的秋天太适合骑行了两个词条登上微博热搜。微风轻轻吹,树影斑驳形成一国乒25人惨遭淘汰!五大单项全败无缘冠军奖杯,创造赛季最差表现2022年9月18日,乒乓球WTT哈萨克斯坦赛即将收官,但国乒的比赛全部结束,25位队员报名参赛,最好成绩是混双亚军,徐海东吴洋晨输给中国台北组合林昀儒陈思羽,男单梁俨苧止步四强,iPhone相机还能这样用?真的大开眼界,可惜好多人都没有用过今天跟大家分享一下,iphone相机的一些实用小技巧,相机中有很多隐藏的小功能,都是一些很常用的,我们日常生活中也都用得到,这样我们懂得其中的一些小操作和技巧,可以让我们在拍摄中更奇瑞智造的新答案坚持以用户为中心的奇瑞汽车,为了给用户带来更合适的产品,积极投身到混动技术研发当中。通过自身技术集成化优势,奇瑞汽车始终不断研发高效率高性能的混动技术方案和相关产品,为用户持续带来大乐透的第108期分析本期前区同尾的了解与分析广汉为人强力,天性精於吏职。见吏民,或夜不寝至旦。尤善为钩距,以得事情。钩距者,设欲知马贾,则先问狗,已问羊,又问牛,然后及马,参伍其贾,以类相准,则知马之贵贱不失实矣。唯广汉至精蒋介石如果当时回归大陆,会得到什么职位?周总理给出了答案在1949年,蒋介石面对着已经取得压倒性优势的我军战士,才明白自已经是大势已去,但即使如此,他仍然不愿意投降,而是率领着自己的残部撤退到了台湾去。而跟随他去往台湾的很多战士们,甚至大乐透22108期分析,上期一等奖11注708万,冷热比连续4期23聆听歌曲一起研究数据分析大乐透22107期开奖信息如下图大乐透22107期数据图表整理及数据分析1上图1显示近1030期红球开出频率分布,蓝色球是代表近10期,紫色球是代表近30期染了美美的头发之后会患癌症吗?现在人的生活越来越好,我们也不再单单追求吃的好吃的饱,我们也会同时追求一些时尚,比如染一头美美的头发。比如有些老年人也会为了遮盖自己的白发,会定期染黑头发。并且更多的年轻人也会为了2022年国庆乘坐三峡游轮的最新船票价格及游轮航次不知不觉,还有不到半个月又是一年一次的国庆节假日了,这不,近期又有许多粉丝给我留言,提前咨询国庆期间乘坐三峡游轮有哪些游轮开航,每人的船票价格需要多少钱。下面小编就给大家简单整理了千年诗词说尽万里秋意!深藏浙江的黄金时代,连苏东坡都魂牵梦萦一场台风过后浙江秋意愈浓赏秋正当时梧桐叶落,秋风萧瑟是秋的脚步橙黄橘绿,风吹麦浪是秋的奉献一年好景君须记是它自古逢秋悲寂寥也是它秋天有太多种面目九种心动,在浙里恰遇宋词千年文字述说