跨域资源请求 JSONP CORS

1.什么是跨域资源请求?

https://blog.csdn.net/u014607184/article/details/52027879

1.1 同源策略

跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制。

XMLHttpRequest 受同源策略限制

2.如何解决 跨域资源请求 限制

JSONP   https://blog.csdn.net/DFF1993/article/details/79925874

CORS  http://www.ruanyifeng.com/blog/2016/04/cors.html

2.1 JSONP

例子:跨域资源位于  http://localhost:8066/file/jsonp

    @RequestMapping(value="/jsonp", method=RequestMethod.GET )
    public String jsonp(@RequestParam("callback") String callback,  HttpServletRequest request) { 

        // 处理正确的jsonp请求, 返回: callback方法名(json字符串)
        if(callback != null && !callback.equals("")) {
            return callback + "(" + "{\"key\": \"hello\"}" + ")";
        }

        //不是jsonp请求
        return "hello";
    }

2.1.1  使用ajax跨域请求限制

###   XMLHttpRequest发起了请求,但是响应中获取不到值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax 跨域请求(不能成功)</title>
</head>
<body>
    <div id="mydiv">
        <button id="btn">点击</button>
    </div>
</body>
<script type="text/javascript">
    window.onload = function() {

    var oBtn = document.getElementById(‘btn‘);

    oBtn.onclick = function() {

        var xhr = new XMLHttpRequest();

        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                    // 处理响应
                    alert( xhr.responseText );
            }
        };
        // 跨域请求
        xhr.open(‘get‘, ‘http://localhost:8066/file/jsonp?callback‘, true);
        xhr.send();
    };
};
</script>
</html>

2.1.2 使用JSONP

## # 在页面插入带有src 属性的 <script>标签,src 地址即跨域资源地址(只能是get请求);

### 服务端对于 JSONP请求的 响应格式是: callback函数名(JSON字符串)

浏览器收到响应后,执行回调函数处理响应。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSONP实现跨域(只支持get请求)</title>
</head>
<body>
    <div id="mydiv">
        <button id="btn">点击</button>
    </div>
</body>

<script type="text/javascript">
    // 回调函数,处理响应
    function handleResponse(response){
            console.log(response);
            alert(JSON.stringify(response));    //将json对象转为  字符串

    }
</script>

<script type="text/javascript">
    window.onload = function() {
    var oBtn = document.getElementById(‘btn‘);

    oBtn.onclick = function() {
        // 创建一个script标签
        var script = document.createElement("script");

        //设置script标签的src
        script.src = "http://localhost:8066/file/jsonp?callback=handleResponse";        

        //在页面插入一个script标签,将会发起src请求
        document.body.insertBefore(script, document.body.firstChild);
    };
};
</script>

</html>

#####

2.2 CORS

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

原文地址:https://www.cnblogs.com/badboyh2o/p/10700710.html

时间: 2024-11-29 04:16:01

跨域资源请求 JSONP CORS的相关文章

常用跨域资源请求分析

WEB开发过程中最常使用 Ajax技术来完成客户端与服务器的通信.而实现Ajax通信的XmlHttpRequest对象会带来跨域安全策略问题.简单来说,默认情况下,XHR对象只能访问与包含它的页面位于同一个域下的资源. 那么问题来了,何为跨域呢?通常,Ajax指向的地址中,二级域名/端口号/协议/必须与包含它的页面相同.举个栗子: www.tangide.com 访问 www.i5r.com是跨域. a.tangide.com 访问 b.tangide.com是跨域. www.tangide.c

跨域技术(JSONP与CROS)

JSONP 我们发现,Web页面上调用js文件时不受是否跨域的影响,凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>.<img>.<iframe>.那就是说如果要跨域访问数据,就服务端只能把数据放在js格式的文件里.恰巧我们知道JSON可以简洁的描述复杂数据,而且JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据.然后客户端就可以通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件.客户

AJAX跨域调用相关知识-CORS和JSONP

1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常会遇到在一个页面的JS代码中,需要通过AJAX去访问另一个服务器并返回数据,这时候就会受到浏览器跨域的安全限制了. 这里要注意,如果只是通过AJAX向另一个服务器发送请求而不要求数据返回,是不受跨域限制的.浏览器只是限制不能访问另一个域的数据,即不能访问返回的数据,并不限制发送请求. 我们接下来就为大家讲解最常见的跨域AJAX调用的解决方案,首先

jsonp突破同源策略,实现跨域访问请求

跨域访问问题,相信大家都有遇到过.这是一个很棘手的问题.不过道高一尺,魔高一丈,对于这类问题,总有解决问题的方案.最近我又接触到了这个问题,解决的途径是ajax+jsonp. 说到这个问题,不得不说一下"同源策略(Same-Origin Policy)",它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源,就是必须协议.域名.端口都一致的,才叫做同源.例如:http://www.12306.cn和https://www.

WeX5 - AJAX跨域调用相关知识-CORS和JSONP

http://docs.wex5.com/ajax-cross-domain/ 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常会遇到在一个页面的JS代码中,需要通过AJAX去访问另一个服务器并返回数据,这时候就会受到浏览器跨域的安全限制了. 这里要注意,如果只是通过AJAX向另一个服务器发送请求而不要求数据返回,是不受跨域限制的.浏览器只是限制不能访问另一个域的数据,即不能访问返回的数据,并

AJAX跨域调用相关知识-CORS和JSONP(引)

AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常会遇到在一个页面的JS代码中,需要通过AJAX去访问另一个服务器并返回数据,这时候就会受到浏览器跨域的安全限制了. 这里要注意,如果只是通过AJAX向另一个服务器发送请求而不要求数据返回,是不受跨域限制的.浏览器只是限制不能访问另一个域的数据,即不能访问返回的数据,并不限制发送请求. 我们接下来就为

跨域post请求实现方案小结--转

[名词解释] 跨域:https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript 同源策略(注意Network Access这一节):http://www.w3.org/Security/wiki/Same_Origin_Policy [问题描述] 浏览器出于安全的考量(避免恶意网站轻易读取其他网站显示的内容,因为该内容可能含有敏感信息,想象iframe嵌套银行网页)原则上允许跨域写而限

javascipt 跨域资源共享、JSONP

跨域资源共享 通过XMLHttpRequest实现ajax通信的时候有一个主要限制,来自于跨域安全策略.默认情况下,xhr对象只能访问到与包含它的页面位于同一个域中的资源.如果请求目标跨域,则会出现跨域问题: 下面的表格描述了在不同情况下允不允许跨域的情况: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.jshttp://www.a.com/script/b.js

JAVA跨域资源访问CORSFilter

当一个资源从与该资源本身所在的服务器不同的域或端口不同的域或不同的端口请求一个资源时,资源会发起一个跨域 HTTP 请求. 出于安全考虑,浏览器会限制从脚本内发起的跨域HTTP请求.跨域资源共享机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行.浏览器支持在 API 容器中使用 CORS,以降低跨域 HTTP 请求所带来的风险. 针对于JAVA开发而言,为了更好的做业务分层,经常会将前后端代码分离开来,发布在不同的服务器上,此时,便会遇到跨域的问题. 跨域有很多种解决方