什么叫跨域请求?

指通过Js在不同的域之间进行数据传输或通信,比如用ajax向一个不同域请求数据,或者通过js获取页面中不同域的框架中的数据。只有协议、域名、端口有一个不同,都会被当做是不同的域。

<script>和<img>这两个标签都不会发生跨域问题,例如:JSONP解决跨越问题就是使用<script>标签来解决。

跨越解决方案CORS:

CORS是W3C的一个标准,全称是"跨域资源共享"(Cross-origin resource sharing),CORS跨域需要浏览器和服务器同时支持。请求过程如下:

javascript 跨域设置 javascript 跨域请求_跨域请求

浏览器首先会向发送一个预请求给服务器,访问一下服务器是否支持跨域,如果服务器支持跨域则会给浏览器回复一个预响应,表示可以开始跨域请求。接下来才是真正的跨域请求和访问。 这个请求的前提是浏览器自己首先要支持跨域请求。

现在大部分浏览器都支持跨域请求,除啦IE10以下的版本可能会出现问题。

服务器在像浏览器响应的设置一个头信息即可进行跨域访问:

response.setHeader("Access-Control-Allow-Origin","允许请求域的域名/*"); 

 Access-Control-Allow-Origin设置允许请求的域也可以设置为 * 表示该资源谁都可以用。

CORS请求默认不发送Cookie和HTTP认证信息

如果跨域请求需要操作cookie,还要设置一个头信息。

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

如果操作cookie,那么第一个头信息的允许请求的域就不能为* 必须为指定的域。cookie是于指定域相关的值。同时,浏览器端在接受数据的同时也要设置同意操作cookie。在请求路径后加{'withCredentials':true}表示同意操作cookie。

 

SpringMVC跨域注解:

springMVC的版本在4.2或以上版本,可以使用注解实现跨域, 我们只需要在需要跨域的方法上添加注解@CrossOrigin即可

@CrossOrigin(origins="允许请求域的域名",allowCredentials="true")  allowCredentials="true"可以省略。