在这里读懂"365bet体育在线"

JS跨域恳求之CORS

来源:原创 2020-02-01 01:27 标签:
这里说的js跨域是指经过js在分歧的域之间停止数据传输或通信,比如用ajax向一个分歧的域恳求数据,或许经过js获得页面平分歧域的框架中(iframe)的数据。只需协定、域名、端口有任何

  这里说的js跨域是指经过js在分歧的域之间停止数据传输或通信,比如用ajax向一个分歧的域恳求数据,或许经过js获得页面平分歧域的框架中(iframe)的数据。只需协定、域名、端口有任何一个分歧,都被算作是分歧的域。

  一个工程经过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.

  CORS是一个W3C规范,全称是"跨域资本共享"(Cross-origin resource sharing)。CORS需求浏览器和效劳器同时支撑。今朝,一切浏览器都支撑该功用,IE浏览器不能低于IE10。它许可浏览器向跨源效劳器,收回XMLHttpRequest恳求,从而克制了AJAX只能同源应用的限制。全部CORS通信过程,都是浏览器主动完成,不需求用户参与。关于开辟者来讲,CORS通信与同源的AJAX通信没有差异,代码完整一样。浏览器一旦发明AJAX恳求跨源,就会主动添加一些附加的头信息,有时还会多出一次附加的恳求,但用户不会有认为。因此,完成CORS通信的关键是效劳器。只需效劳器完成了CORS接口,便可以跨源通信。

  恳求过程以下图:

  

  Preflight Request:

  

  然后效劳器端给我们前去一个Preflight Response

  

  处理

  (1) 在方法中添加以下代码

  Access-Control-Allow-Origin

  Access-Control-Allow-Origin是HTML5中定义的一种处理资本跨域的计谋。

  他是经过效劳器端前去带有Access-Control-Allow-Origin标识的Response header,用来处理资本的跨域权限后果。

  http://localhost:9105:表现许可跨域的资本,*表现一切资本都许可跨域

  (2) 修改js的代码(angular.js)

  SpringMVC跨域注解

  springMVC的版本在4.2或以上版本,可以应用注解完成跨域, 我们只需求在需求跨域的方法上添加注解@CrossOrigin便可

  PS:我的是JDK1.7,没胜利,估计要JDK1.8以上吧,没去测试

推荐阅读