js中的跨域标签有那几个呢?分别是这三种。img , link ,script
我们后台人员用的最多的是script,通过访问其他服务器。请求的参数,封装成一个函数调用的字符串返回。我只需要在定义一个函数相同的方法去执行,被封装的参数就可以实现最原生的跨域请求了。
在java领域中,springMVC的版本在4.2或以上版本,可以使用注解实现跨域, 我们只需要在需要跨域的方法上添加注解@CrossOrigin即可
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
CORS请求默认不发送Cookie和HTTP认证信息。如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow-Credentials字段。另一方面,开发者必须在AJAX请求中打开withCredentials属性。否则,即使服务器同意发送Cookie,浏览器也不会发送。或者,服务器要求设置Cookie,浏览器也不会处理。
下面是简单小案例。
import java.util.HashMap;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author liyu
*/
@RestController
@RequestMapping(value = "/cross", method = RequestMethod.POST)
public class ApiController {
@CrossOrigin(origins = "http://172.16.53.54:8080")
@RequestMapping(value = "/get")
public HashMap<String, Object> get(@RequestParam String str) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("str", str);
System.out.println("跨域成功;");
return map;
}
}
页面代码:
<script>
$(function() {
$('#tt').click(function() {
$.ajax({
url : "http://172.16.53.54:8080/cross/get",
type : "POST",
data : {
str : "测试"
},
success : function(data, status, xhr) {
console.log(data);
alert(data.str);
}
});
});
})
</script>
|
-
1.png
(80.54 KB, 下载次数: 17)
|