跨域请求(一)

2018-06-24 01:23:03来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

1.cors 跨域资源共享

  cors是W3C标准,可以通过XMLHttpRequest 解除ajax的同源使用限制。

  1.1基本使用

  前台请求和正常ajax请求没有任何区别,浏览器发现是跨域请求则会在请求头中增加 “Origin” 请求头

    

Origin:http://localhost:8080

  cors的实现主要是后台提供接口Access-Control-Allow-Origin

response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
// * 代表接受任意域的请求
response.setHeader("Access-Control-Allow-Origin", "*");

  1.2发送Cookie

  如果要发送Cookie则后台需要设置Access-Control-Allow-Credentials响应头

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

  前台js则需要设置XMLHttpRequest对象的withCredentials属性

var xhr = new XMLHttpRequest();
xhr.open("POST","http://localhost:8090/javascriptDemo/CrosDemo",true);
xhr.withCredentials = true;

  不过这个请求中的Cookie是8090域中的Cookie,并不是8080的,另外如果要发送Cookie那么“Access-Control-Allow-Origin”必须设置成指定的域,不能使用“*”

原网页也没有办法通过document.cookie访问到服务器域下的Cookie

2.JSONP

  JSONP是英文JSON with Padding的缩写,是一个非官方的协议。它允许在服务器端生成script tags返回至客户端,通过javascript callback的形式来实现站点访问。 JSONP是一种script tag的注入,将server返回的response添加到页面实现特定功能。

  个人理解:前台将回调函数传递给后台,服务端直接返回可执行的JavaScript函数调用

  前台代码:

<script src="http://localhost:8090/javascriptDemo/CrosDemo?jsonp=test"></script>

  后台代码:

response.setContentType("text/javascript"); 
PrintWriter out = response.getWriter();
String callBack = (String) request.getParameter("jsonp");
Map map = new HashMap();
map.put("name", "test");
map.put("id", "12");
JSONObject jsonObj = JSONObject.fromObject(map);
out.print(callBack+"("+jsonObj+")");
out.close();

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:EasyUI 通过 Combobox 实现 AutoComplete 效果

下一篇:JavaScript八张思维导图