关于跨域的问题,以及跨域的几种方式

xiaoxiao2021-02-28  46

跨域:

浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了.

上面提到的,同域的概念又是什么呢??? 简单的解释就是相同域名,端口相同,协议相同。

同源策略:

请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.

比如:我在本地上的域名是study.cn,请求另外一个域名一段数据

这个时候在浏览器上会报错:

这个就是同源策略的保护,如果浏览器对javascript没有同源策略的保护,那么一些重要的机密网站将会很危险~

study.cn/json/jsonp/jsonp.html 请求地址 形式 结果 http://study.cn/test/a.html同一域名,不同文件夹 成功 http://study.cn/json/jsonp/jsonp.html同一域名,统一文件夹 成功 http://a.study.cn/json/jsonp/jsonp.html不同域名,文件路径相同 失败 http://study.cn:8080/json/jsonp/jsonp.html 同一域名,不同端口 失败 https://study.cn/json/jsonp/jsonp.html 同一域名,不同协议 失败

 

 

 

 

 

 

当前端页面与后台运行在不同的服务器时,就必定会出现跨域这一问题,本篇简单介绍解决跨域的三种方案,部分代码截图如下,仅供参考:

方式一:使用ajax的jsonp

前端代码 服务器代码

 使用该方式的缺点:请求方式只能是get请求.

方式二:使用jQuery的jsonp插件插件下载网址:https://github.com/jaubourg/jquery-jsonp前端代码

服务器代码 使用该方式的特点:与方式一相比,请求方式不只局限于get请求,还可以是post请求,但从服务器从获取的数据依然是jsonp格式

方式三:使用cors前端代码

服务器代码使用该方式的特点:与前两种方式相比,前端代码和未处理跨域前一样,即普通的ajax请求,但服务器代码添加了一段解决跨域的代码    // 设置:Access-Control-Allow-Origin头,处理Session问题        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));        response.setHeader("Access-Control-Allow-Credentials", "true");        response.setHeader("P3P", "CP=CAO PSA OUR");        if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {            response.addHeader("Access-Control-Allow-Methods", "POST,GET,TRACE,OPTIONS");            response.addHeader("Access-Control-Allow-Headers", "Content-Type,Origin,Accept");            response.addHeader("Access-Control-Max-Age", "120");        }cors高级使用:在springmvc中配置拦截器创建跨域拦截器实现HandlerInterceptor接口,并实现其方法,在请求处理前设置头信息,并放行在springmvc的配置文件中配置拦截器,注意拦截的是所有的文件

 

转载请注明原文地址: https://www.6miu.com/read-2613830.html

最新回复(0)