怎么解决跨域问题,前端解决跨域的三种方法

前后端分离带来的跨域问题1、什么同源策略?同源指的是"协议+域名+端口“三个相同,即使两个不同的域名指向同一个IP地址,也是非同源。同源策略是为了安全,确保一个应用中的资源只能被本应用的资源访

前后端分离带来的跨域问题

1、什么同源策略?

同源指的是 "协议 + 域名 + 端口 “ 三个相同,即使两个不同的域名指向同一个IP地址,也是非同源。

同源策略是为了安全,确保一个应用中的资源只能被本应用的资源访问。否则,岂不是谁都能访问。

同源

非同源

两个相同的源之间浏览器是默认可以相互访问资源和操作DOM的。两个不同的源之间

若想要相互访问资源或者操作 DOM,那么会有一套基础的安全策略的制约。具体有如下两

方面的限制。

1. 安全性: 浏览器要防止当前站点的私密数据不会向其他站点发送

如当前站点的Cookie,LocalStorage,IndexDb 不会被发送到其他站点或被其他站点脚本读

取到无法跨域获取Dom,无法发送Ajax请求。

2. 可用性:大型站点的图片,音视频等资源,希望部署在独立服务器上,为缓解当前服务

的压力,开放某些特定的方式,访问非同源站点

前端解决跨域的三种方法,如:<script><img><iframe><link><vedio>等,可以同src属性跨域访问

允许跨域提交表单/或重定向请求

解决方案

1.服务端解决

跨域请求分两种情况

a. 简单请求:

请求方法使用GET/HEAD/POST请求之一

仅能使用CORS安全的头部,Accept,Accept-Language,Content-Language,Content-Type

如果浏览器得到上述响应,则认定为可以跨域,后续就跟简单请求的处理是一样的了。虽然原理比较复杂,但是前面说过:事实上,SpringMVC已经帮我们写好了CORS的跨域过滤器:CorsFilter ,内部已经实现了刚才所讲的判定逻辑,我们直。

怎么解决跨域问题

Content-Type的值只能是:text/plain,multipart/form-data,application/x-

www-form- urlencoded三者其中之一

站点。

/** * 简单请求1 * * @param response * @return * @throws IOException */@RequestMapping(value = &34;,method = RequestMethod.GET)@ResponseBodypublic String ajaxGetReq(HttpServletResponse response) throws IOException {response.addHeader(&34;,&34;);return &34;;}/** * 简单请求2 * * @param user * @param response * @return * @throws IOException */@RequestMapping(value = &34;,method = RequestMethod.POST)@ResponseBodypublic User ajaxPostReq2(User user,HttpServletResponse response) throws IOException {response.addHeader(&34;,&34;);return user;}

b. 复杂请求

想要彻底解决跨域问题,只需要破坏以上三个条件的任一即可:添加浏览器启动参数: chrome --disable-web-security ,但是极不推荐这种解决方式。Jsonp,全称 JSON with Padding ,一种非官方的协议,而是一种约定;前端通过。

不符合简单请求条件的即为复杂请求,访问跨域资源前,需要发起preflight预检请求

(OPTIONS请求)询问何种请求是被允许的,预检请求失败,则不会发起正式的业务请

求,预检请求成功,然后发起正式请求

3. 在 Controller 注解上方添加 @CrossOrigin 注解后,仍然出现跨域问题,解决方案之一就是:在 @RequestMapping 注解中没有指定 Get、Post 方式,具体指定后,问题解决。类似代码如下:参考文章:1. 官方文档 https://spring。.

SpringBoot解决方案:

怎么解决跨域问题

1. 创建一个filter解决跨域。

@Componentpublic class SimpleCORSFilter implements Filter {public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException {HttpServletResponse response = (HttpServletResponse) res;response.setHeader(&34;,&34;);response.setHeader(&34;,&34;);response.setHeader(&34;,&34;);response.setHeader(&34;,&34;); chain.doFilter(req,res);}public void init(FilterConfig filterConfig) {}public void destroy() {}}

直接在 Nginx 中设置允许跨域的 header(也可以在后端的应用程序内设置,不过在 Nginx 入口配置的话更加统一),在 location 配置中直接使用指令 add_header( 官方文档链接 ),

2.基于WebMvcConfigurerAdapter配置加入Cors的跨域

import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configuration public class CorsConfig extends WebMvcConfigurerAdapter {@Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(&34;) .allowedOrigins(&34;) .allowCredentials(true) .allowedMethods(&34;,&34;,&34;,&34;) .maxAge(3600); } }

如果你想做到更细致也可以使用@CrossOrigin这个注解在controller类中使用。

怎么解决跨域问题

这样就可以指定该controller中所有方法都能处理来自http:19.168.1.10:8080中的请求。

脚手架提供一个配置好的 webpack ,可以在配置文件中的proxy添加代理地址,这样可以避免跨域问题,如果是自己搭建的框架自行配置 webpack 依然可以实现代理

第一种Filter的方案也支持springmvc。

第二种常用于springboot。

2. 代理服务器,反向代理接口请求

apache http server / nginx

3. jsonp 方式

<script>function clickButton() {var scriptTag = document.createElement(&34;);scriptTag.src = &34;;document.body.appendChild(scriptTag);}function myFunc(myObj) {document.getElementById(&34;).innerHTML = myObj.name;}</script>

上一篇 2023年02月05 05:02
下一篇 2023年02月06 19:59

相关推荐

  • 小米怎么开机,小米怎么强制开机手机

    小米怎么强制开机手机,米粉们!你们知道小米手机定时开关机吗?小米手机定时开关机在哪里设置?先不说定时开关机,其实我们再使用包括小米手机在内的任何手机时,都很少会去关机吧!步骤1.点一下小米手机里面的“

    2023年02月09 292
  • autocad正版多少钱,正版autocad软件多少钱

    近日,数码大方宣布推出“CAD风暴行动”,突破传统的CAD软件授权销售模式,以后将通过互联网模式销售CAD软件,正版autocad软件多少钱,同时提供按年授权和永久授权两种模式,价格分别是660元/年

    2023年02月22 245
  • 微信支付上限多少,微信10万限额解除教程

    微信派今天,#微信青少年模式再次升级!如果微信用户没有实名认证,微信零钱支付单笔限额1000元,每日限额1000元,每月限额2000元,如果已经完成了实名认证,每日限额10000元,每年限额20万。微

    2023年03月16 254
  • 怎么办理pos,pos机这么办理

    pos机这么办理,现在市场上有很多五花八门的POS机办理,八仙过海各显神通,那么作为普通客户怎么才能确定自己办理的机器安全稳定呢?首先说下:一般正规办理POS机要需要在银行办理。一般办理POS机分个人

    2023年02月04 218
  • win10怎么格式化,win10怎么格式化清空全电脑

    电脑知道@PCknow前面我们分享过WIN7激活后升级到WIN10可免费激活,【教程】WIN10专业版永久激活方法,亲测真实有效!如果你想全新安装就没有办法了,但是,win10怎么格式化清空全电脑,并

    2023年02月04 249
  • 苹果se怎么样,苹果se建议买吗

    单手掌控一切苹果se建议买吗,新iPhoneSE在外观上沿用了iPhone8的设计,这也就意味着它放在现在绝对是一款小屏手机,我也再次看到宽厚的“额头”和“下巴”、“停航母的边框”和标志性Home键。

    2023年02月04 293
  • 密码怎么改,密码怎么改回去

    ■社保卡有两个密码,密码怎么改回去,一个是社保账户密码(平时简称为社保卡密码),另一个是银行账户密码,这两个密码是相对独立的。■社会保障号码采用公民身份证号码,全国唯一、终身不变、规则统一。社保账户初

    2023年02月08 278
  • 天猫超市多少钱包邮,天猫超市27kg需要多少邮费

    天猫超市27kg需要多少邮费,马云爸爸的天猫超市让顾客充分享受到了“网上超市”这种全新的生活购物方式所带来的实惠与方便。在供应商品等环节上,保障所有商品都为正品真货,并严格遵照国家三包法规,确保顾客能

    2023年03月17 265
  • 二手苹果5s多少钱,苹果5s二手50元

    朋友想要买一个小屏手机,当做备用机问我有没有什么可推荐的,咨询了它的需求,主要有三点:1.小屏;2.流畅;3.便宜。简单啊,这件小事难不倒我,我直接一张截图过去,“750元,16年出厂,iphone5

    2023年02月26 255
  • mac怎么打顿号,MacBook打顿号

    基本案情2018年4月间,柏霞浦县柏洋乡Y912福塔线福寿亭至塔后公路改建工程招标,MacBook打顿号,采用电子招标方式,投标保证金提交的金额26万元。投标人须知第3.4.4条关于“投标保证金不予退

    2023年02月06 290
  • 马云有多少钱啊,中国首富谁是第一名

    炣燃科技10月28日讯(方锐)尽管马云最近因为抨击金融体系遭遇炮轰,但并不影响其身价的暴增。作为蚂蚁金服的最大受益者,从阿里巴巴退隐后的马云,还持有蚂蚁金服的持股8.8%,是为实际控制人。中国首富谁是

    2023年03月13 243
  • 打印机怎么换墨,老式打印机怎么取墨盒

    很多朋友都知道,打印机的墨盒是不通用的,各个型号的打印机都有专门的适配墨盒,所以在更换墨盒的时候,需要按照打印机的型号选择适配的墨盒。在打印机上面查看墨盒的型号:先打开打印机的墨盒仓,在仓门或者安装墨

    2023年02月13 286
  • win7怎么共享打印机,2个win7系统共享1台打印机

    1、首先右键桌面上的计算机,然后选择管理,在弹出的【计算机管理】窗口中依次选择:系统工具、本地用户和组、用户,外媒可以找到【Guest】然后双击进去,取消勾选账户已禁用的选项。更多系统教程尽在小白系统

    2023年02月05 265
关注微信