跨域请求方式理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20757489/article/details/84782556
  1. jaonp方式(jsonp 是通过script 标签方式实现的,相当于钻了个空子
  2. 更改服务器响应头:(网站开发建议使用这种),更改响应头后允许跨域。

jsonp实现跨域请求

前端
    $.ajax({

            type:"GET",

            url:"http://www.deardull.com:9090/getMySeat", //访问的链接

            dataType:"jsonp",  //数据格式设置为jsonp

            jsonp:"callback",  //Jquery生成验证参数的名称

            success:function(data){  //成功的回调函数

                alert(data);

            },

            error: function (e) {

                alert("error");

            }

        });

后端

    @ResponseBody

    @RequestMapping("/getMySeat")

    public String getMySeatSuccess(@RequestParam("callback") String callback){

        Gson gson=new Gson();

        Map<String,String> map=new HashMap<>();

        map.put("seat","1_2_06_12");

       logger.info(callback);

        return callback+"("+gson.toJson(map)+")";

    }

需要注意的是:

前端注意与后端沟通约定jsonp的值,通常默认都是用callback。

后端根据jsonp参数名获取到参数后要与本来要返回的json数据按“callback(json)”的方式构造。

不用jsonp实现跨域请求

jsonp 是通过script 标签方式实现的,相当于钻了个空子。不用jsonp 又该如何实现跨域访问呢?

首先了解下请求的方式:

1、简单请求

请求类型为HEADGETPOST,并满足一定的条件的请求。

2、非简单请求

当然就是除简单请求之外的请求咯。

Ajax请求为非简单请求,简单请求直接发送,而非简单请求在实际请求之前,会先发送一个“预检请求”(preflight request),预检请求通过访问控制检查后才会发送需要的请求。

预检请求不能通过检查情况:

预检请求不通过,可能是由于Origin 为null 造成的,此时会提示如下错误:

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

服务器端需设置的几个响应头:

Access-Control-Allow-Origin :允许的源,以逗号分隔各源的字符串,如:"www.a.com,www.b.com";

Access-Control-Allow-Methods:允许的请求方式,同上,如:"GET,PUT,POST";

Access-Control-Allow-Credentials:true|false,是否允许传送cookie,需设置为true;

Access-Control-Expose-Headers:允许的请求头。XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。如要想从响应头中获取orgin、accept 头,对应值为:"orgin,accept"。

猜你喜欢

转载自blog.csdn.net/qq_20757489/article/details/84782556
今日推荐