Javaweb_Vue_Hbuilder_前后端分离跨域访问通信_setHeader()与addHeader()区别

最搭了一个大数据的平台,采用前后端分离做的,各自测试好后就准备整合了,第一次干这个事情,确实没什么经验,在这里记录一下。

1、跨域是指一个域下的程序试图去请求(跳转,获取,嵌入)另一个域下的资源
这里就涉及到一个同源策略这是浏览器的基本约定,是为了保护其正常功能的安全而提出的。
同源策略是浏览器的行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收。
当然既是约定,那么就有对应的方案来解决,这里我简单示例一下我使用的解决方案:
跨域资源共享(CORS)
这种方案如果没有带跨域的cookie则只需要后端设置即可,如果需要带跨域cookie,则需要前后端协作。
不携带跨域cookie的解决方法与携带跨域cookie时的解决方法全部标注在注释中:
我们可以创建一个过滤器,对我们被的资源全部提供跨域支持,在过滤器的doFilter方法中添加跨域请求头,并且这些都是以键值对形式写入:

//允许跨域访问的域名:若有端口需写全(协议+域名+端口),若没有端口末尾不用加'/',如果设置值为 '*' 表示接收来自任意域的请求,当然也可以指定接收特定域的请求;
((HttpServletResponse) response).setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8080");
//((HttpServletResponse) response).setHeader("Access-Control-Allow-Origin", "*");
// 允许前端带认证cookie:启用此项后,上面的域名不能为'*',必须指定具体的域名,并且前端需要在请求中设置允许跨域cookie的属性 withCredentials: true 
((HttpServletResponse) response).setHeader("Access-Control-Allow-Credentials", "true");
//允许跨域的请求方式
((HttpServletResponse) response).setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
// 提示OPTIONS预检时,后端需要设置的两个常用自定义头
((HttpServletResponse) response).setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type,Token,Accept, Connection, User-Agent, Cookie");
//定义完跨域操作记得传递请求
chain.doFilter(request, response);

如果需要对指定的几个资源提供跨域,可以通过创建虚拟目录的方式实现对特定的几个资源做过滤拦截操作,可以参考一下这篇博客:

https://blog.csdn.net/LW_Hadoop/article/details/104808363

使用setHeader()addHeader()方法的区别
这里提一下Javaweb设置请求的两种方式setHeader()addHeader()方法的区别:
1、setHeader():如果不存在则创建并添加该请求头,如果存在那么就会覆盖原来的value
2、addHeader():如果不存在则创建并添加该请求头,如果存在那么就不创建不覆盖原来的value
注意请求头是以键值对(key-value)的方式设置的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值