解决JS 跨域调用解决方案之二: CORS

之前文章使用JSONP 技术来解决, 本文使用CORS技术来解决js跨域调用问题。

1、js跨域请求:

     只要协议、域名、端口有任何一个不同,都被当作是不同的域。

2、跨域调用测试:

前端控制台出现 以下信息,表示不能跨域访问:

  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.

3、跨域解决方案 CORS

       CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

请求过程如下图:

Preflight Request

然后服务器端给我们返回一个Preflight Response

4、 入门小demo

场景:localhost:9105  要跨域访问 localhost:9107,并且使用cookie

方案一:

则在localhost:9107 中写以下代码:

response.setHeader("Access-Control-Allow-Origin", "http://localhost:9105");

response.setHeader("Access-Control-Allow-Credentials", "true");

方案二:

使用spring 标签,注意spring的版本高于4.2

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

标签中allowCredentials的默认为true,可以不用写, 即为

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

猜你喜欢

转载自blog.csdn.net/py_tamir/article/details/81436646
今日推荐