跨域问题解决

问题显示

什么是跨域??

跨域:一个域的前端js脚本代码,访问另一个域的后端代码(controller)

学成在线

测试 上边的代理 ,结果 报错如下 :

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin
'http://localhost:11000' is therefore not allowed access.

原因:浏览器的同源策略不允许跨域访问,所谓同源策略是指协议、域名、端口相同。

为什么浏览器要遵循同源策略??


解决:采用proxyTable解决

(Vue的脚手架开发  )

cms跨域解决原理:
1、访问页面http://localhost:11000/
2 、页面请求http://localhost:11000/cms
由于 url由http://localhost:31001/cms...改为 “http://localhost:11000/cms." ,所以不存在跨域
3、通过proxyTable由node服务器代理请求 http://localhost:31001/cms.
服务端不存在跨域问题

前端:

解释:

/api/cms  是为了好区别(识别)拦截的内容

target:“http://localhost:31001” 我的理解是将原先的URL给替换掉了,并不是在新的地址上添加/cms  因为后面的参数还有的,

品优购

商品的详情页(js),添加到购物车上(另一个后端的服务 controller)出现跨域错误,

{

商品详情web  有对应的服务 地址就是 9105   你所有的数据都是请求这个地址获取到的

购物车又是一个服务,前后台都有,服务端的地址是9107 ,购物车web只能访问9107的服务端

}

解析问题:

不能加载地址信息,(你要进行跨域请求的时候,XMLHttpRequest 对象检查头信息是否存在,"No 'Access-Control-Allow-Origin' header"是不存在的,就不允许你跨域请求的),所以在默认的情况下js是不能跨域的,为了安全性,设计成这样的

 

XMLHttpRequest cannot  load

http://localhost:9107/cart/addGoodsToCartList.do?itemId=112344&num=1. 

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9100' is therefore not allowed access. The response had HTTP status code 400.

解决办法:

1.JSONP

2.跨域资源共享CORS(官方推荐)

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

执行流程:

前段(js)

服务端(controller)

后期的改进:

SpringMVC跨域注解

springMVC的版本在4.2或以上版本,可以使用注解实现跨域,

我们只需要在需要跨域的Controller方法上添加注解@CrossOrigin即可

@CrossOrigin(origins="http://localhost:9105",allowCredentials="true")

 

allowCredentials="true"  可以缺省  默认是有的

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值