java 跨域请求

跨域的原理

浏览器的同源策略,出于防范跨站脚本的攻击,禁止客户端脚本(如 JavaScript)对不同域的服务进行跨站调用。

一般的,只要网站的 协议名protocol、 主机host、 端口号port 这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用。

利用jsonp实现跨域访问

我使用两台电脑模拟来模拟
第一台的服务器:
http://192.168.2.104:8089/testJSOP 此地址用来返回数据
springmvc框架,简单的代码如下

@ResponseBody
 @RequestMapping("/testJSOP")
 public String testJSONP(String callback){
   JSONObject result = new JSONObject();//用的是阿里的fastjson
   result.put("aa",1);
   result.put("bb", 2);

   return callback+"("+result.toString()+")";
 }

第二台服务器:
此机器只有一个服务页面,向上面的服务器请求获取数据
http://192.168.2.122:8085/index.jsp

  • 使用 jQuery 集成的 $.ajax 实现 JSONP 跨域调用

在此页面http://192.168.2.122:8085/index.jsp编写如下内容:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


java 跨域请求_第1张图片
图片1.jpg
java 跨域请求_第2张图片
图片2.jpg
  • 使用
    java 跨域请求_第3张图片
    图片3.jpg
    java 跨域请求_第4张图片
    图片4.jpg

    使用 CORS 实现跨域调用

    Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的现代版。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以让网页设计师用一般的 XMLHttpRequest,这种方式的错误处理比 JSONP 要来的好。另一方面,JSONP 可以在不支持 CORS 的老旧浏览器上运作。现代的浏览器都支持 CORS。

    第一台服务器:
    http://192.168.2.104:8089/testJSOP 此地址用来返回数据
    springmvc框架,简单的代码如下

    @ResponseBody
     @RequestMapping("/testJSOP")
     public String testJSONP(HttpServletResponse res){
    
            res.addHeader("Access-Control-Allow-Origin", "*");
            res.addHeader("Access-Control-Allow-Headers", "X-Requested-With");
            res.addHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    
        JSONObject result = new JSONObject();
    
         result.put("aa",1);
         result.put("bb", 2);
    
         return result.toString();
     }
    

    第二台服务器
    http://192.168.2.122:8085/index3.jsp
    页面内容:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
    
    java 跨域请求_第5张图片
    图片5.jpg

你可能感兴趣的:(java 跨域请求)